# -*- coding: cp1252 -*-

#-----------------------------------------------------------------------
# creaci'+to+'n de la planilla 
#-----------------------------------------------------------------------

import xlwt
from xlwt import Workbook, easyxf, Formula, Style
from datetime import datetime, date
import tkFileDialog

# caracteres especiales
tA = u'\u00C1' 
tI = u'\u00CD'
tO = u'\u00D3'
tU = u'\u00DA' 
ta = u'\u00E1'
te = u'\u00E9'
ti = u'\u00ED'
to = u'\u00F3'
tu = u'\u00FA'
mu = u'\u00B5'
gn = u'\u00F1' # ñ
gra = u'\u00B0' # grado
alfa = u'\u03B1'
delta = u'\u03B4'
theta = u'\u03B8'
nu = u'\u03BD'
cuadrado = u'\u00B2' # ^2
pm = u'\u00B1' # mas menos
bullet = u'\u2022' # •
percent = u'\u0025'
bar = u'\u002F'
arroba = u'\uFF20'

#-----------------------------------------------------------------------
# estilos de fuente
#-----------------------------------------------------------------------

# estilos utilizados en la creaci'+to+'n de la planilla .xls

estiloxl1 = easyxf('font: name Arial, bold True, height 220; alignment: horizontal center, vertical center, wrap True; borders: left thick, right thick, top thick, bottom thick;')
estilo_flat = easyxf('font: name Arial; alignment: horz center, vert center, wrap True')
estilo_flat_2_decimales = easyxf('font: name Arial; alignment: horz center, vert center, wrap True', num_format_str="0.##")
estilo_flat_2_decimales_porcentaje = easyxf('font: name Arial; alignment: horz center, vert center, wrap True', num_format_str="0.##%")
estilo_flatr = easyxf('font: name Arial; alignment: horz right, vert center, wrap True')
estilo_bolddoble_tnr = easyxf('font: name Times New Roman, bold True; alignment: horizontal center, vertical center, wrap True; borders: left double, right double, top double, bottom double;')
estilo_flatl_tnr = easyxf('font: name Times New Roman; alignment: horz left, vert center, wrap True')
estilo_flatj_tnr = easyxf('font: name Times New Roman; alignment: horz justified, vert center, wrap True')
estilo_flatltop_tnr = easyxf('font: name Times New Roman; alignment: horz left, vert top, wrap True; protection: cell_locked false')
estilo_flat_tnr8 = easyxf('font: name Times New Roman, height 160; alignment: horz center, vert center, wrap True')
estilo_flatl_tnr75 = easyxf('font: name Times New Roman, height 150; alignment: horz left, vert top, wrap True')
estilo_flatl_tnr8 = easyxf('font: name Times New Roman, height 160; alignment: horz left, vert center, wrap True')
estilo_flat_tnr9 = easyxf('font: name Times New Roman, height 180; alignment: horz center, vert center, wrap True')
estilo_flatnl_21 = easyxf('font: name Arial Narrow, height 420; alignment: horz left, vert center, wrap True')
estilo_flatnr = easyxf('font: name Arial Narrow; alignment: horz right, vert center, wrap True')
estilo_flatt = easyxf('font: name Arial; alignment: horz center, vert center, wrap True; borders: left thick, right thick, top thick, bottom thick;')
estilo_flatthin_tnr = easyxf('font: name Times New Roman; alignment: horz center, vert center, wrap True; borders: left thin, right thin, top thin, bottom thin;')
estilo_flatt_b = easyxf('font: name Arial; alignment: horz center, vert center, wrap True; borders: bottom thick;')
estilo_flatt_lrb = easyxf('font: name Arial; alignment: horz center, vert center, wrap True; borders: left thick, right thick, bottom thick;')
estilo_flatt_lrb_gray = easyxf('font: name Arial; alignment: horz center, vert center, wrap True; borders: left thick, right thick, bottom thick; pattern: pattern solid, fore_color gray25')
estilo_flatt_ltb = easyxf('font: name Arial; alignment: horz center, vert center, wrap True; borders: left thick, top thick, bottom thick;')
estilo_flatt_rtb = easyxf('font: name Arial; alignment: horz center, vert center, wrap True; borders: top thick, right thick, bottom thick;')
estilo_flat_gray = easyxf('font: name Arial; alignment: horz center, vert center, wrap True; borders: left thin, bottom thin; pattern: pattern solid, fore_color gray25')
estilo_italic = easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True')
estilo_italic_2_decimales = easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True', num_format_str="0.##")
estilo_italict = easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: left thick, right thick, top thick, bottom thick;')
estilo_italict_b = easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: bottom thick;')
estilo_italict_l = easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: left thick;')
estilo_italict_r = easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: right thick;')
estilo_italict_lb = easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: left thick, bottom thick;')
estilo_italict_rb = easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: right thick, bottom thick;')
estilo_italict_lrt = easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: left thick, right thick, top thick;')
estilo_italicr = easyxf('font: name Arial, italic True; alignment: horz right, vert center, wrap True')
estilo_italicl = easyxf('font: name Arial, italic True; alignment: horz left, vert center, wrap True')
estilo_italicrt_l = easyxf('font: name Arial, italic True; alignment: horz right, vert center, wrap True; borders: left thick;')
estilo_italiclt_l = easyxf('font: name Arial, italic True; alignment: horz left, vert center, wrap True; borders: left thick;')
estilo_italiclt_r = easyxf('font: name Arial, italic True; alignment: horz left, vert center, wrap True; borders: right thick;')
estilo_italiclt_b = easyxf('font: name Arial, italic True; alignment: horz left, vert center, wrap True; borders: bottom thick;')
estilo_italicrt_b = easyxf('font: name Arial, italic True; alignment: horz right, vert center, wrap True; borders: bottom thick;')
estilo_italic_gray_thin = easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: left thin, right thin, top thin, bottom thin; pattern: pattern solid, fore_color gray25')
estilo_bold = easyxf('font: name Arial, bold True; alignment: horizontal center, vertical center, wrap True;')
estilo_bold_3_decimales = easyxf('font: name Arial, bold True; alignment: horizontal center, vertical center, wrap True;', num_format_str="0.###")
estilo_boldr = easyxf('font: name Arial, bold True; alignment: horizontal right, vertical center, wrap True;')
estilo_boldl_tnr = easyxf('font: name Times New Roman, bold True; alignment: horizontal left, vertical center, wrap True;')
estilo_boldt_tnr = easyxf('font: name Times New Roman, bold True; alignment: horizontal center, vertical center, wrap True; borders: left thick, right thick, top thick, bottom thick;')
estilo_boldrt = easyxf('font: name Arial, bold True; alignment: horizontal right, vertical center, wrap True; borders: left thick, right thick, top thick, bottom thick;')
estilo_underl_tnr = easyxf('font: name Times New Roman, underline True; alignment: horizontal left, vertical center, wrap True;')
estilo_underr_tnr = easyxf('font: name Times New Roman, underline True; alignment: horizontal right, vertical center, wrap True;')
estilo_celeste = easyxf('font: name Arial; alignment: horizontal left, vertical center, wrap True; borders: left thick, right thick, top thick, bottom thick; pattern: pattern solid, fore_color pale_blue; protection: cell_locked false')
estilo_grayt_t = easyxf('font: name Arial; alignment: horizontal left, vertical center, wrap True; borders: top thick; pattern: pattern fine_dots, fore_color gray_ega')
estilo_gray_dots = easyxf('font: name Arial; alignment: horizontal left, vertical center, wrap True; pattern: pattern fine_dots, fore_color gray_ega')
estilo_gray = easyxf('font: name Arial; alignment: horizontal center, vertical center, wrap True; pattern: pattern solid, fore_color gray_ega')
estilo_fecha = easyxf('font: name Arial; alignment: horizontal center, vertical center, wrap True; borders: left thick, right thick, top thick, bottom thick;', num_format_str='DD-MMM-YYYY')
estilo_fechal_tnr = easyxf('font: name Times New Roman; alignment: horizontal left, vertical center, wrap True;', num_format_str='DD \d\e MMMM \d\e YYYY')


class Planilla:
    def __init__(self, bloques):
        """ el programa genera una planilla de calulo con los datos
        tomados en las mediciones y otros datos agregados
        la primer hoja es el informe de la calibracion
        aclaraion: el modulo xlwt esta en ingles, esto se ve en
        las formulas
        """
        self.wb = xlwt.Workbook(encoding='cp1252', style_compression=2)
        self.hoja_informe = self.wb.add_sheet('Informe', cell_overwrite_ok=True)
        self.hoja_informe.protect = True
        self.hoja_informe.password = 'EnAC'
        self.hoja_medidas = self.wb.add_sheet('FO02-Resultados de Calibracion', cell_overwrite_ok=True)
        self.hoja_medidas.protect = True
        self.hoja_medidas.password = 'EnAC'
        self.hoja_incertidumbres = self.wb.add_sheet('FO03-Balance de Incertidumbre', cell_overwrite_ok=True)
        self.hoja_incertidumbres.protect = True
        self.hoja_incertidumbres.password = 'ENAC'
        self.hoja_datos_p = self.wb.add_sheet('FO04-Datos de Patrones', cell_overwrite_ok=True)
        self.hoja_datos_p.protect = True
        self.hoja_datos_p.password = 'ENAC'
        self.hoja_datos_c = self.wb.add_sheet('FO05-Datos de Calibracion', cell_overwrite_ok=True)
        self.hoja_resultados = self.wb.add_sheet('Resultados', cell_overwrite_ok=True)
        self.hoja_resultados.protect = True
        self.hoja_resultados.password = 'EnAC'
        self.hoja_tiempo_acero_tesa = self.wb.add_sheet('Deriva tiempo acero Tesa Cary', cell_overwrite_ok=True)
        self.hoja_tiempo_acero_tesa.protect = True
        self.hoja_tiempo_acero_tesa.password = 'EnAC'
        self.hoja_tiempo_acero_koba = self.wb.add_sheet('Deriva tiempo acero Koba', cell_overwrite_ok=True)
        self.hoja_tiempo_acero_koba.protect = True
        self.hoja_tiempo_acero_koba.password = 'EnAC'
        self.hoja_tiempo_tungsteno_tesa = self.wb.add_sheet('Deriva tungsteno Tesa Cary', cell_overwrite_ok=True)
        self.hoja_tiempo_tungsteno_tesa.protect = True
        self.hoja_tiempo_tungsteno_tesa.password = 'EnAC'

          # ajustes de las hojas de la planilla
        self.hoja_informe.set_header_str("")
        self.hoja_informe.set_footer_str("")
        self.hoja_informe.set_top_margin(1.35)
        self.hoja_informe.set_left_margin(1)
        
          # tamaños de columnas y filas
        self.hoja_informe.col(0).width = 400
        self.hoja_informe.col(1).width = 2900
        self.hoja_informe.col(2).width = 3300
        self.hoja_informe.col(3).width = 3300
        for l in range(6): self.hoja_informe.col(4+l).width = 1650
        for l in range(350):
            self.hoja_informe.row(l).height_mismatch = 1
            self.hoja_informe.row(l).height = 275
            
        self.hoja_informe.col(10).width = 3000
        self.hoja_informe.col(11).width = 7500
        self.hoja_informe.col(12).width = 7500
        self.hoja_informe.col(11).hidden = True
        self.hoja_informe.col(12).hidden = True
        
        self.hoja_medidas.row(0).height_mismatch = 1
        self.hoja_medidas.row(0).height = 700
        for i in range(7):
            self.hoja_medidas.row(i+1).height_mismatch = 1
            self.hoja_medidas.row(i+1).height = 320
        
        self.hoja_medidas.col(0).width = 5120
        self.hoja_medidas.col(2).width = 3600
        self.hoja_medidas.col(3).width = 3600
        self.hoja_medidas.col(4).width = 3600
        self.hoja_medidas.col(5).width = 3400
        self.hoja_medidas.col(6).width = 3400
        self.hoja_medidas.col(8).width = 3500
        self.hoja_medidas.col(8).width = 3400
        self.hoja_medidas.col(10).width = 3600
        self.hoja_medidas.col(11).hidden = True
        
        self.hoja_incertidumbres.row(0).height_mismatch = 1
        self.hoja_incertidumbres.row(0).height = 700
        for i in range(4):
            self.hoja_incertidumbres.row(i+1).height_mismatch = 1
            self.hoja_incertidumbres.row(i+1).height = 320
        
        self.hoja_incertidumbres.col(0).width = 2000
        self.hoja_incertidumbres.col(2).width = 4500
        self.hoja_incertidumbres.col(3).width = 3000
        self.hoja_incertidumbres.col(4).width = 2000
        self.hoja_incertidumbres.col(5).width = 3700
        self.hoja_incertidumbres.col(6).width = 2100
        self.hoja_incertidumbres.col(7).width = 2100
        self.hoja_incertidumbres.col(8).width = 1200
        self.hoja_incertidumbres.col(9).width = 1800
        self.hoja_incertidumbres.col(10).width = 1500
        self.hoja_incertidumbres.col(11).width = 2000
        self.hoja_incertidumbres.col(12).width = 1000
        self.hoja_incertidumbres.col(13).width = 2600
        self.hoja_incertidumbres.col(14).width = 2000
        self.hoja_incertidumbres.col(15).width = 2000
        self.hoja_incertidumbres.col(16).width = 1000
        self.hoja_incertidumbres.col(17).width = 2000
        self.hoja_incertidumbres.col(18).width = 2000
        self.hoja_incertidumbres.col(19).width = 2000
        self.hoja_incertidumbres.col(20).width = 2000
        self.hoja_incertidumbres.col(21).width = 2500
        
        self.hoja_datos_p.col(4).width = 3600
        self.hoja_datos_p.col(13).width = 3600
        self.hoja_datos_p.col(15).width = 3600

        # split resultados

        self.hoja_resultados.row(0).height_mismatch = 1
        self.hoja_resultados.row(0).height = 500
        self.hoja_resultados.panes_frozen = True
        self.hoja_resultados.remove_splits = True
        self.hoja_resultados.horz_split_pos = 2

     
    def encabezado(self, ot_str, n_ot_str, marca_str, 
        material_str, fecha_a_str, fecha_m_str, fecha_d_str, long_nom,
        tabla, bloques):
        """ encabezados de las hojas
        todas las planillas contendran el encabezado
        independientemente de la cantidad de bloques a calibrar
        """

        # datos de los bloques
        serie_acero = [1628012,1827973,728103,1527976,327839,2327993,1527962,1128100,1227945,2127955,827992,2128171,927919,728117,1128074,1328078,1527984,1927983,2227900,
        1727902,828093,1727923,1627922,1327908,927917,1327913,2028092,1527975,627947,1627944,1827943,1628037,2128068,1828131,1528053,2328016,2428029,1728107,2128027,
        2228072,828184,328130,228036,1028080,1828043,2228203,1527264,1228021,2128135,1328104,828108,1928109,1924666,2227679,1828152,628030,1724667,2128101,1628132,1224656,
        1328105,2128129,2128322,2428201,628217,1227429,827934,1228065,1828022,2228076,1327900,1628094,2328081,1128110,2006810,1106790,1206780,1067600,2006800,1906830,2006430,
        1606820,1206700,4281970,1527967,428091,527988,1228120,1128119,1728111,328133,1028198,8785300,1228118,8785300,128151,1828206,4282000,1128122,1627576,1728208,228127,
        928063,1282040,928134,128211,878530,1728199,1728098,1628148,628083,1528196,1028070,1127487,627781,1627897,1628360,1828077,8785300,127697,827415,1628165]
        serie_tungsteno = ['C6840','C6841','C6781','C6782','C6783','C6784','C6785','C6786','C6787','C6788','C6789','C6790','C6791','C6792','C6793','C6794','C6795','C6796','C6797','C6798','C6799','C6800','C6801','C6802',
        'C6803','C6804','C6805','C6806','C6807','C6808','C6809','C6810','C6811','C6812','C6813','C6814','C6815','C6816','C6817','C6818','C6819','C6820','C6821','C6822','C6823','C6824','C6825','C6826','C6827','C6828','C6829',
        'C6830','C6831','C6832','C6833','C6834','C6835','C6836','C6837','C6838','C6839','C6842','C6843','C6844','C6845','C6846','C6847','C6848','C6849','C6850','C6851','C6852','C6853','C6854','C6855','C6856','C6857','C6858',
        'C6859','C6860','C6861','C6862','C6863','C6864','C6865','C6866','C6867','C6868','C6869','C6870','C6871','C6872','C6873','C6874','C6875','C6876','C6877','C6878','C6879','C6880','C6881','C6882','C6883','C7101','C6885',
        'C6886','C6887','C6888','C6889','C6890','C6891','C6892','C6893','C6894','C6895','C6896','C6897','C6898','C6899','C6901','C6902','C6896']
        dn_e_acero = [0.03,0.16,0.08,0.02,0.07,-0.01,-0.01,0.03,0.03,0.06,0.01,-0.04,0.02,0.05,-0.05,-0.06,0.04,0.09,0.00,-0.04,0.06,0.04,0.01,-0.06,0.02,0.02,0.01,-0.07,
        -0.06,0.08,-0.05,-0.05,-0.05,0.13,-0.03,0.14,0.03,-0.06,-0.10,-0.08,-0.05,-0.07,-0.14,-0.06,-0.01,-0.06,-0.01,-0.03,-0.06,0.02,-0.01,-0.16,-0.11,0.05,0.05,0.03,-0.04,
        0.03,-0.06,0.13,0.02,0.04,-0.13,-0.03,-0.02,-0.01,-0.04,-0.01,-0.03,0.06,-0.05,0.04,-0.09,-0.04,0.03,0.17,-0.11,-0.08,-0.07,0.00,-0.07,-0.02,-0.01,-0.11,0.27,0.09,
        0.11,-0.02,0.01,0.01,-0.05,-0.03,-0.16,0.03,0.20,-0.14,0.05,0.05,0.14,0.04,0.00,-0.18,0.19,-0.17,-0.08,0.08,0.16,0.13,0.17,0.18,0.03,-0.10,0.18,-0.03,-0.02,0.05,
        -0.08,0.00,-0.05,-0.04,0.61,-0.09]
        dn_e_tungsteno = [-0.03,0.07,0.01,-0.01,0.07,0.06,0.00,0.05,0.02,-0.04,0.01,0.06,-0.08,0.07,0.04,-0.01,0.00,0.03,0.05,-0.08,0.06,0.00,-0.02,0.00,-0.03,0.06,0.02,0.02,
        0.01,-0.09,0.05,0.00,-0.04,0.02,0.02,-0.06,0.03,-0.03,-0.02,0.01,0.02,-0.03,0.01,0.03,-0.03,-0.01,0.04,-0.02,-0.03,0.05,0.04,0.02,-0.03,-0.02,0.00,0.05,0.01,0.04,
        -0.02,0.01,0.01,-0.05,0.03,0.02,-0.03,-0.01,0.06,0.04,0.02,0.03,0.04,0.03,0.03,0.01,0.00,0.02,-0.03,-0.04,0.00,0.02,-0.04,0.01,-0.08,0.00,-0.08,0.06,0.04,-0.08,-0.03,
        -0.04,-0.03,-0.06,0.01,0.00,-0.03,0.00,-0.07,-0.01,0.03,-0.04,-0.03,0.01,-0.03,0.02,-0.07,-0.07,-0.02,-0.03,-0.06,-0.06,-3.00,-0.08,-0.08,-0.10,-0.11,-0.12,-0.05,
        -0.12,-0.11,-0.07,-0.12,-0.06]
        d_deriva_acero = [0.0208,0.0115,0.0100,0.0416,0.0058,0.0058,0.0100,0.0153,0.0400,0.0058,0.0231,-0.0400,0.0208,0.0173,0.0153,0.0458,0.0115,0.0100,0.0115,0.0153,0.0058,
        0.0058,0.0100,0.0058,0.0100,0.0153,0.0153,0.0503,0.0100,0.0058,0.0058,0.0557,0.0551,0.0058,0.0503,0.0115,0.0115,0.0115,0.0100,0.0058,0.0153,0.0115,0.0252,0.0361,
        0.0351,0.0252,0.0153,0.0500,0.0058,0.0058,0.0115,0.0173,0.0100,0.0100,0.0115,0.0058,0.0153,0.0000,0.0153,0.0153,0.0058,0.0115,0.0115,0.0100,0.0058,0.0208,0.0000,
        0.0000,0.0100,0.0153,0.0058,0.0058,0.0058,0.0115,0.0058,0.0351,0.0451,0.0173,0.0656,0.0000,0.0503,0.0208,0.0058,0.0100,0.0985,0.0058,0.0153,0.0115,0.0252,0.0058,
        0.0115,0.0100,-0.1600,0.0058,0.2000,0.0115,0.0208,0.0416,0.0529,0.0100,0.0153,0.0000,0.0513,0.0058,0.0100,0.0100,0.1600,0.0757,0.0100,0.1201,0.0100,0.0058,0.0173,
        0.0208,0.0058,0.0173,0.0231,0.0404,-0.0500,0.0451,0.2554,0.0436]
        d_deriva_tungsteno = [0.0058,0.0000,0.0058,0.0058,0.0058,0.0000,0.0058,0.0100,0.0058,0.0058,0.0153,0.0153,0.0058,0.0000,0.0000,0.0058,0.0000,0.0058,0.0058,0.0000,
        0.0000,0.0058,0.0058,0.0058,0.0058,0.0000,0.0000,0.0058,0.0000,0.0000,0.0058,0.0000,0.0058,0.0058,0.0000,0.0000,0.0058,0.0058,0.0058,0.0058,0.0000,0.0058,0.0100,
        0.0000,0.0000,0.0058,0.0000,0.0058,0.0058,0.0000,0.0058,0.0000,0.0058,0.0100,0.0000,0.0058,0.0058,0.0058,0.0058,0.0058,0.0058,0.0115,0.0000,0.0058,0.0058,0.0058,
        0.0058,0.0058,0.0000,0.0000,0.0058,0.0000,0.0000,0.0000,0.0058,0.0000,0.0058,0.0100,0.0058,0.0058,0.0058,0.0058,0.0058,0.0000,0.0058,0.0000,0.0058,0.0000,0.0000,
        0.0115,0.0000,0.0000,0.0000,0.0058,0.0058,0.0058,0.0000,0.0058,0.0000,0.0058,0.0100,0.0058,0.0058,0.0000,0.0058,0.0058,0.0000,0.0058,0.0058,0.0058,0.0000,0.0000,
        0.0000,0.0058,0.0058,0.0115,0.0100,0.0153,0.0115,0.0200,0.0115,0.0115]
        datos_temporales_acero_cary = {'2002':{'dn':[0.00, 0.14, 0.09, 0.10, 0.08, 0.00, 0.01, 0.06, 0.11, 0.06, 0.05, 0.04, 0.06, 0.08, -0.02, 0.03, 0.06, 0.11, 0.02, 
        -0.01, 0.06, 0.03, 0.03, -0.07, 0.03, 0.05, 0.04, 0.03, -0.05, 0.07, -0.04, 0.06, 0.06, 0.14, 0.07, 0.16, 0.05, -0.04, -0.09, -0.08, -0.03, -0.05, -0.09, 0.01, 
        0.06, -0.01, -0.03, 0.07, -0.05, 0.01, 0.01, -0.13, -0.12, 0.06, 0.05, 0.04, -0.01, 0.03, -0.03, 0.15, 0.03, 0.02, -0.15, -0.02, -0.02, 0.02, -0.04, -0.01, -0.05, 
        0.03, -0.04, 0.04, -0.08, -0.06, 0.02, 0.10, -0.02, -0.11, 0.06, 0.00, 0.03, 0.02, -0.02, -0.09, 0.08, 0.10, 0.08, 0.00, 0.06, 0.02, -0.07, -0.05, 0.15, 0.04, 
        0.15, -0.12, 0.01, -0.03, 0.04, 0.06, 0.03, -0.18, 0.09, -0.17, -0.06, 0.09, -0.02, -0.01, 0.18, -0.06, 0.02, -0.11, 0.21, 0.01, -0.01, 0.08, -0.04, 0.08, 0.17, 
        0.05, 0.12, -0.01],
        'vl':[0.02, 0.05, 0.05, 0.04, 0.02, 0.05, 0.04, 0.05, 0.03, 0.02, 0.03, 0.05, 0.03, 0.05, 0.04, 0.03, 0.02, 0.04, 0.04, 0.05, 0.03, 0.05, 0.03, 0.04, 0.04, 0.05
        , 0.03, 0.05, 0.05, 0.03, 0.02, 0.04, 0.03, 0.05, 0.05, 0.02, 0.03, 0.02, 0.02, 0.03, 0.02, 0.02, 0.03, 0.05, 0.04, 0.02, 0.05, 0.05, 0.02, 0.02, 0.01, 0.02, 0.02
        , 0.02, 0.05, 0.05, 0.03, 0.05, 0.05, 0.04, 0.01, 0.02, 0.04, 0.05, 0.04, 0.03, 0.05, 0.02, 0.03, 0.04, 0.03, 0.02, 0.01, 0.02, 0.04, 0.03, 0.03, 0.05, 0.02, 0.05
        , 0.03, 0.05, 0.03, 0.04, 0.03, 0.04, 0.05, 0.04, 0.04, 0.05, 0.05, 0.04, 0.05, 0.04, 0.04, 0.03, 0.04, 0.04, 0.05, 0.04, 0.04, 0.05, 0.04, 0.04, 0.05, 0.03, 0.05
        , 0.05, 0.05, 0.04, 0.05, 0.02, 0.04, 0.04, 0.05, 0.05, 0.04, 0.06, 0.05, 0.06, 0.02, 0.04]},
        '2006':{'dn':[0.04, 0.16, 0.07, 0.04, 0.07, 0.00, 0.00, 0.04, 0.07, 0.05, 0.01, 0.02, 0.03, 0.08, -0.03, -0.03, 0.04, 0.10, 0.00, -0.03, 0.07, 0.03, 0.02, -0.06
        , 0.01, 0.03, 0.02, -0.03, -0.07, 0.07, -0.04, -0.01, 0.00, 0.13, 0.01, 0.16, 0.05, -0.06, -0.08, -0.07, -0.02, -0.07, -0.12, -0.04, 0.02, -0.04, 0.00, 0.02, -0.06
        , 0.02, -0.01, -0.16, -0.13, 0.04, 0.03, 0.04, -0.03, 0.03, -0.05, 0.12, 0.02, 0.02, -0.13, -0.04, -0.03, -0.02, -0.04, -0.01, -0.04, 0.05, -0.04, 0.05, -0.09, -0.04
        , 0.03, 0.13, -0.07, -0.08, -0.02, 0.00, -0.03, -0.01, -0.01, -0.10, 0.22, 0.10, 0.10, -0.02, 0.03, 0.01, -0.05, -0.04, -0.07, 0.04, 0.29, -0.14, 0.02, 0.03, 0.12
        , 0.05, 0.02, -0.18, 0.16, -0.18, -0.07, 0.07, -0.25, 0.11, 0.16, 0.07, 0.01, -0.11, 0.18, -0.02, -0.01, 0.05, -0.04, 0.03, 0.93, 0.00, 0.49, -0.02],
        'vl':[0.11, 0.08, 0.03, 0.17, 0.06, 0.04, 0.04, 0.09, 0.08, 0.04, 0.07, 0.09, 0.05, 0.13, 0.13, 0.04, 0.04, 0.07, 0.04, 0.04, 0.16, 0.05, 0.04, 0.03, 0.11, 0.09
        , 0.08, 0.13, 0.08, 0.03, 0.15, 0.17, 0.06, 0.07, 0.05, 0.15, 0.05, 0.11, 0.06, 0.05, 0.04, 0.07, 0.08, 0.06, 0.14, 0.06, 0.05, 0.11, 0.05, 0.05, 0.04, 0.04, 0.04
        , 0.05, 0.06, 0.05, 0.07, 0.08, 0.06, 0.05, 0.04, 0.11, 0.09, 0.10, 0.06, 0.07, 0.10, 0.04, 0.06, 0.04, 0.02, 0.05, 0.03, 0.05, 0.05, 0.04, 0.05, 0.05, 0.03, 0.05
        , 0.04, 0.05, 0.04, 0.04, 0.03, 0.03, 0.04, 0.02, 0.03, 0.03, 0.03, 0.03, 0.08, 0.04, 0.04, 0.02, 0.04, 0.04, 0.04, 0.04, 0.06, 0.03, 0.03, 0.08, 0.03, 0.03, 0.09
        , 0.04, 0.03, 0.04, 0.03, 0.04, 0.06, 0.05, 0.03, 0.04, 0.06, 0.06, 0.13, 0.07, 0.06, 0.08]},
        '2010':{'dn':[0.03, 0.16, 0.08, 0.02, 0.07, -0.01, -0.01, 0.03, 0.03, 0.06, 0.01, -0.04, 0.02, 0.05, -0.05, -0.06, 0.04, 0.09, 0.00, -0.04, 0.06, 0.04, 0.01, -0.06
        , 0.02, 0.02, 0.01, -0.07, -0.06, 0.08, -0.05, -0.05, -0.05, 0.13, -0.03, 0.14, 0.03, -0.06, -0.10, -0.08, -0.05, -0.07, -0.14, -0.06, -0.01, -0.06, -0.01, -0.03
        , -0.06, 0.02, -0.01, -0.16, -0.11, 0.05, 0.05, 0.03, -0.04, 0.03, -0.06, 0.13, 0.02, 0.04, -0.13, -0.03, -0.02, -0.01, -0.04, -0.01, -0.03, 0.06, -0.05, 0.04, -0.09
        , -0.04, 0.03, 0.17, -0.11, -0.08, -0.07, 0.00, -0.07, -0.02, -0.01, -0.11, 0.27, 0.09, 0.11, -0.02, 0.01, 0.01, -0.05, -0.03, -0.23, 0.03, 0.37, -0.14, 0.05, 0.05
        , 0.14, 0.04, 0.00, -0.18, 0.19, -0.17, -0.08, 0.08, -0.41, 0.13, 0.17, 0.18, 0.03, -0.10, 0.18, -0.03, -0.02, 0.05, -0.08, 0.00, 1.22, -0.04, 0.61, -0.09, ],
        'vl':['-' for i in range(122)]}}
        datos_temporales_acero_koba = {'longitud':[0.5000, 1.0000, 1.0005, 1.0010, 1.0020, 1.0030, 1.0040, 1.0050, 1.0060, 1.0070, 1.0080, 1.0090, 1.0100, 1.0200, 1.0300
        , 1.0400, 1.0500, 1.0600, 1.0700, 1.0800, 1.0900, 1.1000, 1.1100, 1.1200, 1.1300, 1.1400, 1.1500, 1.1600, 1.1700, 1.1800, 1.1900, 1.2000, 1.2100, 1.2200, 1.2300
        , 1.2400, 1.2500, 1.2600, 1.2700, 1.2800, 1.2900, 1.3000, 1.3100, 1.3200, 1.3300, 1.3400, 1.3500, 1.3600, 1.3700, 1.3800, 1.3900, 1.4000, 1.4100, 1.4200, 1.4300
        , 1.4400, 1.4500, 1.4600, 1.4700, 1.4800, 1.4900, 1.5000, 2.0000, 2.5000, 3.0000, 3.5000, 4.0000, 4.5000, 5.0000, 5.5000, 6.0000, 6.5000, 7.0000, 7.5000, 8.0000
        , 8.5000, 9.0000, 9.5000, 10.0000, 10.5000, 11.0000, 11.5000, 12.0000, 12.5000, 13.0000, 13.5000, 14.0000, 14.5000, 15.0000, 15.5000, 16.0000, 16.5000, 17.0000
        , 17.5000, 18.0000, 18.5000, 19.0000, 19.5000, 20.0000, 20.5000, 21.0000, 21.5000, 22.0000, 22.5000, 23.0000, 23.5000, 24.0000, 24.5000, 25.0000, 50.0000, 75.0000
        , 100.0000],
        '2011':{'dn':[0.03, -0.07, -0.01, 0.19, -0.02, 0.11, -0.05, 0.06, 0.01, 0.05, 0.07, -0.04, 0.14, 0.09, -0.09, 0.04, 0.06, -0.01, -0.04
        , -0.01, 0.00, 0.13, 0.00, -0.05, 0.07, 0.12, 0.07, 0.04, 0.07, -0.05, 0.11, 0.12, 0.10, 0.08, -0.09, 0.17, -0.04, 0.11, -0.06, -0.09, 0.15, 0.03, 0.10, 0.10, 0.07
        , 0.03, 0.09, 0.06, 0.17, 0.14, -0.07, 0.02, 0.00, 0.04, 0.16, -0.13, -0.03, 0.10, 0.09, -0.04, -0.02, 0.02, 0.00, 0.14, 0.04, 0.13, 0.20, -0.08, 0.00, -0.05, 0.03
        , 0.15, -0.04, 0.07, 0.07, 0.05, 0.12, -0.06, 0.02, 0.15, 0.02, 0.17, -0.02, 0.13, 0.08, -0.03, 0.09, 0.10, -0.16, -0.05, 0.20, 0.10, 0.02, 0.03, -0.19, 0.11, -0.01
        , -0.06, -0.22, 0.18, 0.11, -0.27, 0.16, -0.20, -0.12, -0.08, 0.00, -0.06, -0.05, -0.18, -0.05, -0.40],
        'vl':[0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02
        , 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02
        , 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02
        , 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02
        , 0.02, 0.03, 0.04, 0.06]}}
        datos_temporales_tungsteno = {'2003':{'dn':[-0.02, 0.07, 0.01, 0.00, 0.07, 0.06, 0.00, 0.06, 0.02, -0.04, 0.02, 0.07, -0.08, 0.07, 0.04, 0.00, 0.00, 0.04, 0.06, -0.08
        , 0.06, 0.01, -0.01, 0.00, -0.02, 0.06, 0.02, 0.03, 0.01, -0.09, 0.06, 0.00, -0.05, 0.03, 0.02, -0.06, 0.04, -0.03, -0.03, 0.01, 0.02, -0.02, 0.03, 0.03, -0.03, 0.00
        , 0.04, -0.02, -0.02, 0.05, 0.05, 0.02, -0.02, 0.00, 0.00, 0.06, 0.01, 0.04, -0.01, 0.01, 0.02, -0.03, 0.03, 0.03, -0.02, 0.00, 0.05, 0.04, 0.02, 0.03, 0.05, 0.03
        , 0.03, 0.01, 0.01, 0.02, -0.02, -0.06, 0.01, 0.03, -0.04, 0.01, -0.07, 0.00, -0.08, 0.06, 0.04, -0.08, -0.03, -0.02, -0.03, -0.06, 0.01, 0.01, -0.02, 0.01, -0.07
        , -0.01, 0.03, -0.03, -0.02, 0.02, -0.02, 0.02, -0.06, -0.06, -0.02, -0.02, -0.05, -0.05, -0.03, -0.08, -0.08, -0.09, -0.11, -0.10, -0.04, -0.11, -0.11, -0.05, -0.12
        , -0.06],
        'vl':[0.03, 0.03, 0.04, 0.05, 0.06, 0.06, 0.07, 0.04, 0.04, 0.03, 0.07, 0.04, 0.05, 0.07, 0.06, 0.05, 0.06, 0.04, 0.07, 0.14, 0.04, 0.05, 0.05, 0.03, 0.04, 0.07, 0.05
        , 0.04, 0.05, 0.03, 0.04, 0.05, 0.05, 0.04, 0.06, 0.08, 0.03, 0.05, 0.05, 0.04, 0.05, 0.04, 0.06, 0.04, 0.03, 0.06, 0.05, 0.05, 0.05, 0.03, 0.05, 0.04, 0.03, 0.04
        , 0.06, 0.03, 0.04, 0.03, 0.04, 0.05, 0.04, 0.05, 0.09, 0.04, 0.06, 0.04, 0.05, 0.04, 0.04, 0.07, 0.04, 0.03, 0.06, 0.05, 0.04, 0.04, 0.05, 0.03, 0.04, 0.04, 0.05
        , 0.02, 0.04, 0.07, 0.05, 0.03, 0.06, 0.04, 0.04, 0.06, 0.08, 0.06, 0.04, 0.06, 0.03, 0.03, 0.08, 0.06, 0.05, 0.06, 0.06, 0.06, 0.04, 0.08, 0.07, 0.08, 0.07, 0.05
        , 0.06, 0.05, 0.07, 0.05, 0.04, 0.09, 0.04, 0.05, 0.04, 0.06, 0.06, 0.07, 0.05, 0.08]},
        '2008':{'dn':[-0.03, 0.07, 0.02, 0.00, 0.06, 0.06, 0.01, 0.07, 0.03, -0.03, 0.04, 0.09, -0.07, 0.07, 0.04, 0.00, 0.00, 0.04, 0.05, -0.08, 0.06, 0.00, -0.02, 0.01
        , -0.02, 0.06, 0.02, 0.02, 0.01, -0.09, 0.06, 0.00, -0.05, 0.02, 0.02, -0.06, 0.04, -0.04, -0.02, 0.02, 0.02, -0.02, 0.02, 0.03, -0.03, -0.01, 0.04, -0.01, -0.03
        , 0.05, 0.05, 0.02, -0.03, -0.01, 0.00, 0.06, 0.02, 0.05, -0.01, 0.02, 0.02, -0.03, 0.03, 0.02, -0.03, -0.01, 0.06, 0.05, 0.02, 0.03, 0.04, 0.03, 0.03, 0.01, 0.00
        , 0.02, -0.02, -0.05, 0.01, 0.03, -0.03, 0.02, -0.07, 0.00, -0.07, 0.06, 0.05, -0.08, -0.03, -0.04, -0.03, -0.06, 0.01, 0.00, -0.02, 0.01, -0.07, 0.00, 0.03, -0.03
        , -0.01, 0.01, -0.03, 0.02, -0.06, -0.07, -0.02, -0.02, -0.06, -0.06, -0.03, -0.08, -0.08, -0.10, -0.10, -0.10, -0.03, -0.09, -0.09, -0.03, -0.10, -0.04],
        'vl':['-' for i in range(122)]},
        '2011':{'dn':[-0.03, 0.07, 0.01, -0.01, 0.07, 0.06, 0.00, 0.05, 0.02, -0.04, 0.01, 0.06, -0.08, 0.07, 0.04, -0.01, 0.00, 0.03, 0.05, -0.08, 0.06, 0.00, -0.02, 0.00
        , -0.03, 0.06, 0.02, 0.02, 0.01, -0.09, 0.05, 0.00, -0.04, 0.02, 0.02, -0.06, 0.03, -0.03, -0.02, 0.01, 0.02, -0.03, 0.01, 0.03, -0.03, -0.01, 0.04, -0.02, -0.03
        , 0.05, 0.04, 0.02, -0.03, -0.02, 0.00, 0.05, 0.01, 0.04, -0.02, 0.01, 0.01, -0.05, 0.03, 0.02, -0.03, -0.01, 0.06, 0.04, 0.02, 0.03, 0.04, 0.03, 0.03, 0.01, 0.00
        , 0.02, -0.03, -0.04, 0.00, 0.02, -0.04, 0.01, -0.08, 0.00, -0.08, 0.06, 0.04, -0.08, -0.03, -0.04, -0.03, -0.06, 0.01, 0.00, -0.03, 0.00, -0.07, -0.01, 0.03, -0.04
        , -0.03, 0.01, -0.03, 0.02, -0.07, -0.07, -0.02, -0.03, -0.06, -0.06, -0.03, -0.08, -0.08, -0.10, -0.11, -0.12, -0.05, -0.12, -0.11, -0.07, -0.12, -0.06],
        'vl':['-' for i in range(122)]}}

        # encabezado medidas

        self.hoja_medidas.write_merge(0, 0, 2, 7,
        'CALIBRACI'+tO+'N POR COMPARACI'+tO+'N MEC'+tA+'NICA DE BLOQUES PATR'
        +tO+'N\nRESULTADOS DE CALIBRACI'+tO+'N',
        estiloxl1)
        self.hoja_medidas.write(1, 0, ot_str, estilo_boldrt)
        self.hoja_medidas.write(2, 0, 'Usuario:', estilo_boldrt)
        self.hoja_medidas.write(3, 0, 'Determinaci'+to+'n:', estilo_boldrt)
        self.hoja_medidas.write(4, 0, 'Direcci'+to+'n:', estilo_boldrt)
        self.hoja_medidas.write(5, 0, 'Pcia.:', estilo_boldrt)
        self.hoja_medidas.write(6, 0, 'Modelo:', estilo_boldrt)
        self.hoja_medidas.write(1, 2, 'Material:', estilo_boldrt)
        self.hoja_medidas.write(1, 5, 'Fecha Ing.:', estilo_boldrt)
        self.hoja_medidas.write(2, 4, 'Fab./Marca:', estilo_boldrt)
        self.hoja_medidas.write(3, 5, 'Id.Interna:', estilo_boldrt)
        self.hoja_medidas.write(4, 4, 'Localidad:', estilo_boldrt)
        self.hoja_medidas.write(5, 3, 'Cod. Postal:', estilo_boldrt)
        self.hoja_medidas.write(5, 5, 'Tel'+te+'fono:', estilo_boldrt)
        self.hoja_medidas.write(6, 4, 'N'+gra+' Serie:', estilo_boldrt)
        self.hoja_medidas.write(3, 11, 'Acero')
        self.hoja_medidas.write(4, 11, 'Tungsteno')
        self.hoja_medidas.write(5, 11, Formula('IF(D2=L4;"ACERO";IF(D2=L5;"TUNGSTENO";""))'))

        self.hoja_medidas.write(1, 1, n_ot_str, estilo_celeste)
        self.hoja_medidas.write(5, 4, '', estilo_celeste)
        self.hoja_medidas.write_merge(1, 1, 3, 4, material_str, estilo_celeste)
        self.hoja_medidas.write_merge(1, 1, 6, 7, marca_str, estilo_celeste)
        self.hoja_medidas.row(1).set_cell_date(6, datetime.date(datetime(int(fecha_a_str), int(fecha_m_str), int(fecha_d_str))), easyxf('alignment: horz center, vert center; pattern: pattern solid, fore_color pale_blue',num_format_str='DD-MM-YYYY'))
        self.hoja_medidas.write_merge(2, 2, 1, 3, '', estilo_celeste)
        self.hoja_medidas.write_merge(2, 2, 5, 7, marca_str, estilo_celeste)
        self.hoja_medidas.write_merge(3, 3, 1, 4, 'Calibraci'+to+'n por comparaci'+to+'n mec'+ta+'nica', estilo_celeste)
        self.hoja_medidas.write_merge(3, 3, 6, 7, '', estilo_celeste)
        self.hoja_medidas.write_merge(4, 4, 1, 3, '', estilo_celeste)
        self.hoja_medidas.write_merge(4, 4, 5, 7, '', estilo_celeste)
        self.hoja_medidas.write_merge(5, 5, 1, 2, '', estilo_celeste)
        self.hoja_medidas.write_merge(5, 5, 6, 7, '', estilo_celeste)
        self.hoja_medidas.write_merge(6, 6, 1, 3, '', estilo_celeste)
        self.hoja_medidas.write_merge(6, 6, 5, 7, '', estilo_celeste)

        # encabezado de incertidumbres

        self.hoja_incertidumbres.write_merge(0, 0, 5, 15, 'CALIBRACI'+
	tO+'N POR COMPARACI'+tO+'N MEC'+tA+'NICA DE BLOQUES PATR'+
	tO+'N\nBALANCE DE INCERTIDUMBRES', estilo_flatt)
        self.hoja_incertidumbres.write_merge(1, 1, 1, 21, 'CALIBRACION  DE  BLOQUES  POR  COMPARACION  MECANICA', estiloxl1)
        self.hoja_incertidumbres.write_merge(3, 3, 3, 5, 'MODELO ASOCIADO A LA MEDICI'+tO+'N:', estilo_flatr)
        self.hoja_incertidumbres.write_merge(3, 3, 6, 14, 'Lbp = d + Lpr.(1+'+alfa+'pr.'+theta+'pr - '+alfa+'bp.'+delta+theta+' - '+alfa+'bp.'+theta+'pr)', estilo_flat)

        # hoja de datos de los bloques patrones

        self.hoja_datos_p.write_merge(1, 1, 0, 7, 'ACERO', estilo_flatt)
        self.hoja_datos_p.write_merge(1, 1, 9, 16, 'TUNGSTENO', estilo_flatt)

        self.hoja_datos_p.write(2, 0, 'LONGITUD', estilo_flat)
        self.hoja_datos_p.write(2, 1, 'N'+gra+' SERIE', estilo_flat)
        self.hoja_datos_p.write(2, 2, 'D.N.(e)', estilo_flat)
        self.hoja_datos_p.write(2, 3, 'V.L.(v)', estilo_flat)
        self.hoja_datos_p.write(2, 4, 'MARCA', estilo_flat)
        self.hoja_datos_p.write(2, 5, 'C.E.T.', estilo_flat)
        self.hoja_datos_p.write(2, 6, 'MATERIAL', estilo_flat)
        self.hoja_datos_p.write(2, 7, 'Desv. Deriva', estilo_flat)
        self.hoja_datos_p.write(2, 9, 'LONGITUD', estilo_flat)
        self.hoja_datos_p.write(2, 10, 'N'+gra+' SERIE', estilo_flat)
        self.hoja_datos_p.write(2, 11, 'D.N.(e)', estilo_flat)
        self.hoja_datos_p.write(2, 12, 'V.L.(v)', estilo_flat)
        self.hoja_datos_p.write(2, 13, 'MARCA', estilo_flat)
        self.hoja_datos_p.write(2, 14, 'C.E.T.', estilo_flat)
        self.hoja_datos_p.write(2, 15, 'MATERIAL', estilo_flat)
        self.hoja_datos_p.write(2, 16, 'Desv. Deriva', estilo_flat)

        for i in range(122):
            self.hoja_datos_p.write(i+3, 0, long_nom[i], estilo_flat)
            self.hoja_datos_p.write(i+3, 1, serie_acero[i], estilo_flat)
            self.hoja_datos_p.write(i+3, 2, Formula('IF(E'+str(i+4)+'="TESA-CARY";'+"'Deriva tiempo acero Tesa Cary'"+'!'+'I'+str(i+4)+'; IF('+"'Deriva tiempo acero Koba'"+'!'+'I'+str(i+4)+'<>"";'+"'Deriva tiempo acero Koba'"+'!'+'I'+str(i+4)+'; IF('+"'Deriva tiempo acero Koba'"+'!'+'G'+str(i+4)+'<>"";'+"'Deriva tiempo acero Koba'"+'!'+'G'+str(i+4)+';'+"'Deriva tiempo acero Koba'"+'!'+'E'+str(i+4)+')))'), estilo_flat_2_decimales)
            #~ self.hoja_datos_p.write(i+3, 2, Formula('IF(E'+str(i+4)+'="TESA-CARY";$'+"'Deriva tiempo acero Tesa Cary'"+'.I'+str(i+4)+';$'+"'Deriva tiempo acero Koba'"+'.E'+str(i+4)+')))'), estilo_flat)
            self.hoja_datos_p.write(i+3, 4, 'TESA-CARY', estilo_flat)
            self.hoja_datos_p.write(i+3, 5, 11.7, estilo_flat)
            self.hoja_datos_p.write(i+3, 6, 'ACERO', estilo_flat)
            self.hoja_datos_p.write(i+3, 7, Formula('IF(E'+str(i+4)+'="TESA-CARY";'+"'Deriva tiempo acero Tesa Cary'"+'!'+'B'+str(i+4)+';IF('+"'Deriva tiempo acero Koba'"+'!'+'B'+str(i+4)+'<>"";'+"'Deriva tiempo acero Koba'"+'!'+'B'+str(i+4)+';C'+str(i+4)+'))'), estilo_flat_2_decimales)
            self.hoja_datos_p.write(i+3, 9, long_nom[i], estilo_flat)
            self.hoja_datos_p.write(i+3, 10, serie_tungsteno[i], estilo_flat)
            self.hoja_datos_p.write(i+3, 11, dn_e_tungsteno[i], estilo_flat)
            self.hoja_datos_p.write(i+3, 13, 'TESA-CARY', estilo_flat)
            self.hoja_datos_p.write(i+3, 14, 4.5, estilo_flat)
            self.hoja_datos_p.write(i+3, 15, 'TUNGSTENO', estilo_flat)
            self.hoja_datos_p.write(i+3, 16, d_deriva_tungsteno[i], estilo_flat)
        #~ self.hoja_datos_p.write(14, 4, 'KOBA', estilo_flat)
        #~ self.hoja_datos_p.write(95, 4, 'KOBA', estilo_flat)
        #~ self.hoja_datos_p.write(97, 4, 'KOBA', estilo_flat)
        #~ self.hoja_datos_p.write(109, 4, 'KOBA', estilo_flat)
        #~ self.hoja_datos_p.write(121, 4, 'KOBA', estilo_flat)
        
        # reescribe en caso de que se usen bloques Koba
        
        for i, j in tabla.items():
            if bloques[i].id_patron=='LIM1-040':
                self.hoja_datos_p.write(j//2+3, 1, '87853', estilo_flat)
                self.hoja_datos_p.write(j//2+3, 4, 'KOBA', estilo_flat)

        # hoja de datos de los bloques a calibrar

        self.hoja_datos_c.write(1, 0, 'LONGITUD', estilo_flat)
        self.hoja_datos_c.write(1, 1, 'N'+gra+' SERIE', estilo_flat)
        self.hoja_datos_c.write(1, 2, 'MARCA', estilo_flat)
        self.hoja_datos_c.write(1, 3, 'C.E.T.', estilo_flat)
        self.hoja_datos_c.write(1, 4, 'MATERIAL', estilo_flat)
        for i in range(122):
            self.hoja_datos_c.write(i+2, 0, long_nom[i], estilo_flat)
            self.hoja_datos_c.write(i+2, 4, material_str, estilo_flat)
            self.hoja_datos_c.write(i+2, 3, Formula('IF(E'+str(i+3)+'="TUNGSTENO";4.5;11.7)'), estilo_flat)
        for i, j in tabla.items():
            self.hoja_datos_c.write(j//2+2, 1, bloques[i].n_serie, estilo_flat)
            self.hoja_datos_c.write(j//2+2, 2, bloques[i].marca, estilo_flat)
            self.hoja_datos_c.write(j//2+2, 4, bloques[i].material, estilo_flat)
                    

        # hoja de resultados

        self.hoja_resultados.write(0, 1, 'Valor nominal', estilo_flat)
        self.hoja_resultados.write(0, 2, 'Fn (e)', estilo_flat)
        self.hoja_resultados.write(0, 3, 'U 95%', estilo_flat)
        self.hoja_resultados.write(0, 4, 'Fs (v)', estilo_flat)
        self.hoja_resultados.write(0, 5, 'U 95%', estilo_flat)
        self.hoja_resultados.write(0, 6, 'Identificaci'+to+'n', estilo_flat)
        self.hoja_resultados.write(1, 0, 'N'+gra+' de bloque', estilo_flat)
        self.hoja_resultados.write(1, 1, '[mm]', estilo_flat)
        for l in range(4): self.hoja_resultados.write(1, 2+l, '['+mu+'m]', estilo_flat)
        self.hoja_resultados.write(1, 6, 'N'+gra+' de serie', estilo_flat)

        # hoja deriva temporal acero tesa-cary

        self.hoja_tiempo_acero_tesa.write_merge(0, 0, 0, 9, 'ACERO TESA-CARY', estilo_flat)
        self.hoja_tiempo_acero_tesa.write_merge(1, 1, 1, 2, 'Desv'+ti+'o Std.', estilo_flat)
        self.hoja_tiempo_acero_tesa.write_merge(1, 1, 4, 5, 'A'+gn+'o 2002', estilo_flat)
        self.hoja_tiempo_acero_tesa.write_merge(1, 1, 6, 7, 'A'+gn+'o 2006', estilo_flat)
        self.hoja_tiempo_acero_tesa.write_merge(1, 1, 8, 9, 'A'+gn+'o 2010', estilo_flat)
        self.hoja_tiempo_acero_tesa.write(2, 0, 'Longitud', estilo_flat)
        self.hoja_tiempo_acero_tesa.write(2, 1, 'D.N. (e)', estilo_flat)
        self.hoja_tiempo_acero_tesa.write(2, 2, 'V.L. (e)', estilo_flat)
        self.hoja_tiempo_acero_tesa.write(2, 4, 'D.N. (e)', estilo_flat)
        self.hoja_tiempo_acero_tesa.write(2, 5, 'V.L. (e)', estilo_flat)
        self.hoja_tiempo_acero_tesa.write(2, 6, 'D.N. (e)', estilo_flat)
        self.hoja_tiempo_acero_tesa.write(2, 7, 'V.L. (e)', estilo_flat)
        self.hoja_tiempo_acero_tesa.write(2, 8, 'D.N. (e)', estilo_flat)
        self.hoja_tiempo_acero_tesa.write(2, 9, 'V.L. (e)', estilo_flat)
        for l in range(len(long_nom)):
            self.hoja_tiempo_acero_tesa.write(3+l, 0, long_nom[l], estilo_flat)
            self.hoja_tiempo_acero_tesa.write(3+l, 1, Formula('STDEV(E'+str(4+l)+';G'+str(4+l)+';I'+str(4+l)+')'), estilo_flat_2_decimales)
            self.hoja_tiempo_acero_tesa.write(3+l, 4, datos_temporales_acero_cary['2002']['dn'][l], estilo_flat)
            self.hoja_tiempo_acero_tesa.write(3+l, 5, datos_temporales_acero_cary['2002']['vl'][l], estilo_flat)
            self.hoja_tiempo_acero_tesa.write(3+l, 6, datos_temporales_acero_cary['2006']['dn'][l], estilo_flat)
            self.hoja_tiempo_acero_tesa.write(3+l, 7, datos_temporales_acero_cary['2006']['vl'][l], estilo_flat)
            self.hoja_tiempo_acero_tesa.write(3+l, 8, datos_temporales_acero_cary['2010']['dn'][l], estilo_flat)
            self.hoja_tiempo_acero_tesa.write(3+l, 9, datos_temporales_acero_cary['2010']['vl'][l], estilo_flat)

        # hoja deriva temporal acero koba

        self.hoja_tiempo_acero_koba.write_merge(0, 0, 0, 9, 'ACERO KOBA', estilo_flat)
        self.hoja_tiempo_acero_koba.write_merge(1, 1, 1, 2, 'Desv'+ti+'o Std.', estilo_flat)
        self.hoja_tiempo_acero_koba.write_merge(1, 1, 4, 5, 'A'+gn+'o 2011', estilo_flat)
        self.hoja_tiempo_acero_koba.write(2, 0, 'Longitud', estilo_flat)
        self.hoja_tiempo_acero_koba.write(2, 1, 'D.N. (e)', estilo_flat)
        self.hoja_tiempo_acero_koba.write(2, 2, 'V.L. (e)', estilo_flat)
        self.hoja_tiempo_acero_koba.write(2, 4, 'D.N. (e)', estilo_flat)
        self.hoja_tiempo_acero_koba.write(2, 5, 'V.L. (e)', estilo_flat)
        for l in range(len(datos_temporales_acero_koba['longitud'])):
            self.hoja_tiempo_acero_koba.write(3+l, 0, datos_temporales_acero_koba['longitud'][l], estilo_flat)
            self.hoja_tiempo_acero_koba.write(3+l, 4, datos_temporales_acero_koba['2011']['dn'][l], estilo_flat)
            self.hoja_tiempo_acero_koba.write(3+l, 5, datos_temporales_acero_koba['2011']['vl'][l], estilo_flat)
        
        # hoja deriva temporal tungsteno tesa-cary

        self.hoja_tiempo_tungsteno_tesa.write_merge(0, 0, 0, 9, 'TUNGSTENO TESA-CARY', estilo_flat)
        self.hoja_tiempo_tungsteno_tesa.write_merge(1, 1, 1, 2, 'Desv'+ti+'o Std.', estilo_flat)
        self.hoja_tiempo_tungsteno_tesa.write_merge(1, 1, 4, 5, 'A'+gn+'o 2003', estilo_flat)
        self.hoja_tiempo_tungsteno_tesa.write_merge(1, 1, 6, 7, 'A'+gn+'o 2008', estilo_flat)
        self.hoja_tiempo_tungsteno_tesa.write_merge(1, 1, 8, 9, 'A'+gn+'o 2011', estilo_flat)
        self.hoja_tiempo_tungsteno_tesa.write(2, 0, 'Longitud', estilo_flat)
        self.hoja_tiempo_tungsteno_tesa.write(2, 1, 'D.N. (e)', estilo_flat)
        self.hoja_tiempo_tungsteno_tesa.write(2, 2, 'V.L. (e)', estilo_flat)
        self.hoja_tiempo_tungsteno_tesa.write(2, 4, 'D.N. (e)', estilo_flat)
        self.hoja_tiempo_tungsteno_tesa.write(2, 5, 'V.L. (e)', estilo_flat)
        self.hoja_tiempo_tungsteno_tesa.write(2, 6, 'D.N. (e)', estilo_flat)
        self.hoja_tiempo_tungsteno_tesa.write(2, 7, 'V.L. (e)', estilo_flat)
        self.hoja_tiempo_tungsteno_tesa.write(2, 8, 'D.N. (e)', estilo_flat)
        self.hoja_tiempo_tungsteno_tesa.write(2, 9, 'V.L. (e)', estilo_flat)
        for l in range(len(long_nom)):
            self.hoja_tiempo_tungsteno_tesa.write(3+l, 0, long_nom[l], estilo_flat)
            self.hoja_tiempo_tungsteno_tesa.write(3+l, 1, Formula('STDEV(E'+str(4+l)+';G'+str(4+l)+';I'+str(4+l)+')'), estilo_flat_2_decimales)
            self.hoja_tiempo_tungsteno_tesa.write(3+l, 4, datos_temporales_tungsteno['2003']['dn'][l], estilo_flat)
            self.hoja_tiempo_tungsteno_tesa.write(3+l, 5, datos_temporales_tungsteno['2003']['vl'][l], estilo_flat)
            self.hoja_tiempo_tungsteno_tesa.write(3+l, 6, datos_temporales_tungsteno['2008']['dn'][l], estilo_flat)
            self.hoja_tiempo_tungsteno_tesa.write(3+l, 7, datos_temporales_tungsteno['2008']['vl'][l], estilo_flat)
            self.hoja_tiempo_tungsteno_tesa.write(3+l, 8, datos_temporales_tungsteno['2011']['dn'][l], estilo_flat)
            self.hoja_tiempo_tungsteno_tesa.write(3+l, 9, datos_temporales_tungsteno['2011']['vl'][l], estilo_flat)
        

    def escribir_medidas(self,laboratorista_str, laboratorista_o1_str,
	laboratorista_o2_str, long_nom, tabla, bloques):
        """ para cada bloque calibrado se agrega en la planilla los
        datos correspondientes
        """
        nrows_i = 8  # cantidad de filas donde arrancan los datos del primer bloque
        nrows_b = 24 # cantidad de filas en planilla por cada bloque
        nrows_c = 2  # cantidad relativa de filas donde va la tabla de las primeras 3 medidas de cada ciclo
        nrows_p = 11 # de las 5 ultimas medidas de cada ciclo
        ncol_i = 1   # cantidad de columnas donde arrancan los datos
        nrowsi_i = 5  # cantidad de filas donde arrancan los datos del primer bloque
            # escritura de datos para cada bloque seleccionado
        for j in range(len(bloques)):
            print j

            for l in range(20): self.hoja_medidas.write(j*nrows_b+nrows_i+l, 10, '', easyxf('borders: right thick;'))

            self.hoja_medidas.write_merge(j*nrows_b+nrows_i, j*nrows_b+nrows_i, ncol_i, ncol_i + 3, 'Planilla de resultados de calibraci'+to+'n', estilo_flatt)
            self.hoja_medidas.write(j*nrows_b+nrows_i, ncol_i + 4, Formula('A2'), estilo_flatt_ltb)
            self.hoja_medidas.write_merge(j*nrows_b+nrows_i, j*nrows_b+nrows_i, ncol_i+5, ncol_i + 6, Formula('B2'), estilo_flatt_rtb)
            self.hoja_medidas.write(j*nrows_b+nrows_i, ncol_i + 7, 'Fecha:', estilo_flatt_ltb)
            self.hoja_medidas.write_merge(j*nrows_b+nrows_i, j*nrows_b+nrows_i, ncol_i + 8, ncol_i + 9, '', estilo_flatt_rtb)
            self.hoja_medidas.write_merge(j*nrows_b+nrows_i, j*nrows_b+nrows_i, ncol_i + 8, ncol_i + 9, Formula('G2'), estilo_fecha)
            self.hoja_medidas.write_merge(j*nrows_b+nrows_i+1, j*nrows_b+nrows_i+1, ncol_i, ncol_i + 3, 'Mediciones del punto central entre PR y BP (en '+mu+'m)', estilo_flatt)
            self.hoja_medidas.write_merge(j*nrows_b+nrows_i+1, j*nrows_b+nrows_i+2, ncol_i+4, ncol_i + 6, 'Datos del patr'+to+'n de referencia\nutilizado como referencia', estilo_italict)
            self.hoja_medidas.write_merge(j*nrows_b+nrows_i+1, j*nrows_b+nrows_i+2, ncol_i+7, ncol_i + 9, 'RESULTADOS\nBloque patr'+to+'n en calibraci'+to+'n', estilo_italict)

            # datos de cada patron
            
            self.hoja_medidas.write(j*nrows_b+nrows_i+3, ncol_i + 4, 'Marca:', estilo_italicrt_l)
            # cambiar segun id_patron
            if bloques[j].id_patron=='LIM1-040':
                self.hoja_medidas.write(j*nrows_b+nrows_i+3, ncol_i + 5, 'KOBA', estilo_italic)
            else:
                self.hoja_medidas.write(j*nrows_b+nrows_i+3, ncol_i + 5, 'TESA-CARY', estilo_italic)
            self.hoja_medidas.write(j*nrows_b+nrows_i+4, ncol_i + 4, 'N'+gra+' de serie:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+4, ncol_i + 5, Formula('IF(J15<>"";IF($D$2=$L$4;LOOKUP(G'+str(15+j*nrows_b)+';'+"'FO04-Datos de Patrones'"+'!$A$4:$G$125;'+"'FO04-Datos de Patrones'"+'!$B$4:$B$125);LOOKUP(G'+str(15+j*nrows_b)+';'+"'FO04-Datos de Patrones'"+'!$J$4:$P$125;'+"'FO04-Datos de Patrones'"+'!$K$4:$K$125));"")'), estilo_italic)
            self.hoja_medidas.write(j*nrows_b+nrows_i+5, ncol_i + 4, 'Material:', estilo_italicrt_l)
            # cambiar segun id_patron
            if bloques[j].id_patron=='LIM1-047':
                self.hoja_medidas.write(j*nrows_b+nrows_i+5, ncol_i + 5, 'TUNGSTENO', estilo_italic)
            else:
                self.hoja_medidas.write(j*nrows_b+nrows_i+5, ncol_i + 5, 'ACERO', estilo_italic)
            self.hoja_medidas.write(j*nrows_b+nrows_i+6, ncol_i + 4, 'Long. Nom.:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+6, ncol_i + 5, long_nom[tabla[j]//2], estilo_flat)
            self.hoja_medidas.write(j*nrows_b+nrows_i+6, ncol_i + 6, Formula('IF(G'+str(15+j*nrows_b)+'<>"";"mm";"")'), estilo_italicl)
            self.hoja_medidas.write(j*nrows_b+nrows_i+7, ncol_i + 4, 'Coef. Exp.:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+7, ncol_i + 5, Formula('IF(J'+str(15+j*nrows_b)+'<>"";IF(G'+str(14+j*nrows_b)+'=L$4;LOOKUP(G'+str(15+j*nrows_b)+';'+"'FO04-Datos de Patrones'"+'!$A$4:$G$125;'+"'FO04-Datos de Patrones'"+'!$F$4:$F$125);LOOKUP(G'+str(15+j*nrows_b)+';'+"'FO04-Datos de Patrones'"+'!$J$4:$P$125;'+"'FO04-Datos de Patrones'"+'!$O$4:$O$125));"")'), estilo_italic)
            self.hoja_medidas.write(j*nrows_b+nrows_i+7, ncol_i + 6, Formula('IF(G'+str(16+j*nrows_b)+'<>"";"'+mu+'m/'+gra+'C";"")'), estilo_italicl)
            self.hoja_medidas.write(j*nrows_b+nrows_i+8, ncol_i + 4, 'e(DN):', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+8, ncol_i + 5, Formula('IF(J'+str(15+j*nrows_b)+'<>"";IF(G'+str(14+j*nrows_b)+'=L$4;LOOKUP(G'+str(15+j*nrows_b)+';'+"'FO04-Datos de Patrones'"+'!$A$4:$G$125;'+"'FO04-Datos de Patrones'"+'!$C$4:$C$125);LOOKUP(G'+str(15+j*nrows_b)+';'+"'FO04-Datos de Patrones'"+'!$J$4:$P$125;'+"'FO04-Datos de Patrones'"+'!$L$4:$L$125));"")'), estilo_italic)
            self.hoja_medidas.write(j*nrows_b+nrows_i+8, ncol_i + 6, Formula('IF(G'+str(17+j*nrows_b)+'<>"";"'+mu+'m";"")'), estilo_italicl)
            self.hoja_medidas.write(j*nrows_b+nrows_i+9, ncol_i + 4, 'v(VL):', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+9, ncol_i + 5, Formula('IF(J'+str(15+j*nrows_b)+'<>"";IF(G'+str(14+j*nrows_b)+'=L$4;LOOKUP(G'+str(15+j*nrows_b)+';'+"'FO04-Datos de Patrones'"+'!$A$4:$G$125;'+"'FO04-Datos de Patrones'"+'!$D$4:$D$125);LOOKUP(G'+str(15+j*nrows_b)+';'+"'FO04-Datos de Patrones'"+'!$J$4:$P$125;'+"'FO04-Datos de Patrones'"+'!$M$4:$M$125));"")'), estilo_italic)
            self.hoja_medidas.write(j*nrows_b+nrows_i+9, ncol_i + 6, Formula('IF(G'+str(18+j*nrows_b)+'<>"";"'+mu+'m";"")'), estilo_italicl)

            # datos de cada bloque a calibrar

            self.hoja_medidas.write(j*nrows_b+nrows_i+3, ncol_i + 7, 'Marca:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+3, ncol_i + 8, Formula(u'IF(J'+str(15+j*nrows_b)+u'<>"";LOOKUP(J'+str(15+j*nrows_b)+u';'+u"'FO05-Datos de Calibracion'"+u'!$A$3:$E$124;'+u"'FO05-Datos de Calibracion'"+u'!$C$3:$C$124);"")'), estilo_italic)
            self.hoja_medidas.write(j*nrows_b+nrows_i+4, ncol_i + 7, 'N'+gra+' de serie:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+4, ncol_i + 8, Formula('IF(J'+str(15+j*nrows_b)+'<>"";LOOKUP(J'+str(15+j*nrows_b)+';'+"'FO05-Datos de Calibracion'"+'!$A$3:$E$124;'+"'FO05-Datos de Calibracion'"+'!$B$3:$B$124);"")'), estilo_italic)
            self.hoja_medidas.write(j*nrows_b+nrows_i+5, ncol_i + 7, 'Material:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+5, ncol_i + 8, Formula('IF(J'+str(15+j*nrows_b)+'<>"";LOOKUP(J'+str(15+j*nrows_b)+';'+"'FO05-Datos de Calibracion'"+'!$A$3:$E$124;'+"'FO05-Datos de Calibracion'"+'!$E$3:$E$124);"")'), estilo_italic)
            self.hoja_medidas.write(j*nrows_b+nrows_i+6, ncol_i + 7, 'Long. Nom.:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+6, ncol_i + 8, long_nom[tabla[j]//2], estilo_italic_gray_thin)
            self.hoja_medidas.write(j*nrows_b+nrows_i+6, ncol_i + 9, Formula('IF(J'+str(15+j*nrows_b)+'<>"";"mm";"")'), estilo_italiclt_r)
            self.hoja_medidas.write(j*nrows_b+nrows_i+7, ncol_i + 7, 'Coef. Exp.:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+7, ncol_i + 8, Formula('IF(J'+str(15+j*nrows_b)+'<>"";LOOKUP(J'+str(15+j*nrows_b)+';'+"'FO05-Datos de Calibracion'"+'!$A$3:$E$124;'+"'FO05-Datos de Calibracion'"+'!$D$3:$D$124);"")'), estilo_italic)
            self.hoja_medidas.write(j*nrows_b+nrows_i+7, ncol_i + 9, Formula('IF(J'+str(16+j*nrows_b)+'<>"";"'+mu+'m/'+gra+'C";"")'), estilo_italiclt_r)
            self.hoja_medidas.write(j*nrows_b+nrows_i+8, ncol_i + 7, 'e(DN):', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+8, ncol_i + 8, Formula('IF(AND(D'+str(16+j*nrows_b)+'<>"";G'+str(17+j*nrows_b)+'<>"");D'+str(16+j*nrows_b)+'+G'+str(17+j*nrows_b)+';"")'), estilo_italic_2_decimales)
            for l in range(4): self.hoja_medidas.write(j*nrows_b+nrows_i+8+l, ncol_i + 9, Formula('IF(J'+str(17+l+j*nrows_b)+'<>"";"'+mu+'m";"")'), estilo_italiclt_r)
            self.hoja_medidas.write(j*nrows_b+nrows_i+9, ncol_i + 7, 'U 95%:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+9, ncol_i + 8, Formula("IF(AND(ABS(G"+str(24+j*nrows_b)+')<=0.5;ABS($G$'+str(27+j*nrows_b)+')<=0.1);'+"'FO03-Balance de Incertidumbre'"+'!$O$'+str(28+j*nrows_b)+';"")'), estilo_italic_2_decimales)
            self.hoja_medidas.write(j*nrows_b+nrows_i+10, ncol_i + 7, 'v(VL):', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+10, ncol_i + 8, Formula('IF(COUNT(C'+str(28+j*nrows_b)+':E'+str(28+j*nrows_b)+')>=2;AVERAGE(C'+str(28+j*nrows_b)+':E'+str(28+j*nrows_b)+');"")'), estilo_italic_2_decimales)
            self.hoja_medidas.write(j*nrows_b+nrows_i+11, ncol_i + 7, 'U 95%:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+11, ncol_i + 8, Formula('IF(COUNT(C'+str(28+j*nrows_b)+':E'+str(28+j*nrows_b)+')>=2;2*((((STDEV(C'+str(28+j*nrows_b)+':E'+str(28+j*nrows_b)+'))/((COUNT(C'+str(28+j*nrows_b)+':E'+str(28+j*nrows_b)+'))^(1/2)))^2+((('+"'FO03-Balance de Incertidumbre'"+'!G9)/2)^2))^(1/2));"")'), estilo_italic_2_decimales)

            for l in range(9): self.hoja_medidas.write(j*nrows_b+nrows_i+3+l, 11, '', estilo_italicrt_l)

            self.hoja_medidas.write(j*nrows_b+nrows_i+12, ncol_i + 9, 'd/m/a de Cal.', estilo_italict_lrt)
            if bloques[j].fecha!='':
                self.hoja_medidas.row(j*nrows_b+nrows_i+13).set_cell_date(ncol_i + 9, bloques[j].fecha, easyxf('font: name Arial;''borders: left thick, right thick, bottom thick; alignment: horz center, vert center; pattern: pattern solid, fore_color gray25',num_format_str='DD-MM-YYYY'))
            self.hoja_medidas.write(j*nrows_b+nrows_i+14, ncol_i + 9, 'Hora de Cal.', estilo_italict_lrt)
            if bloques[j].hora!='':
                self.hoja_medidas.row(j*nrows_b+nrows_i+15).set_cell_date(ncol_i + 9, bloques[j].hora, easyxf('font: name Arial;''borders: left thick, right thick, bottom thick; alignment: horz center, vert center; pattern: pattern solid, fore_color gray25',num_format_str='HH:MM'))
            self.hoja_medidas.write(j*nrows_b+nrows_i+16, ncol_i + 9, 'Realiz'+to+'', estilo_italict_lrt)
            if laboratorista_str=='Otro':
                self.hoja_medidas.write(j*nrows_b+nrows_i+17, ncol_i + 9, laboratorista_o1_str+laboratorista_o2_str, estilo_flatt_lrb_gray)
            else:
                self.hoja_medidas.write(j*nrows_b+nrows_i+17, ncol_i + 9, laboratorista_str, estilo_flatt_lrb_gray)
            self.hoja_medidas.write(j*nrows_b+nrows_i+18, ncol_i + 9, 'Verific'+to+'', estilo_italict_lrt)
            self.hoja_medidas.write(j*nrows_b+nrows_i+19, ncol_i + 9, '', estilo_flatt_lrb_gray)
            
            
            self.hoja_medidas.write_merge(nrows_i+j*nrows_b, nrows_i+nrows_p+j*nrows_b+8, 0, 0, 'Pieza N'+gra+' '+str(j+1), estiloxl1)
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b, ncol_i, 'Posici'+to+'n', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: right thin, bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b, ncol_i+1, '1'+gra+' Ciclo', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: left thin, bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b, ncol_i+2, '2'+gra+' Ciclo', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: left thin, bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b, ncol_i+3, '3'+gra+' Ciclo', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: left thin, bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b, ncol_i, 'Posici'+to+'n', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b, ncol_i+1, '1'+gra+' Ciclo', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: left thin, bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b, ncol_i+2, '2'+gra+' Ciclo', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: left thin, bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b, ncol_i+3, '3'+gra+' Ciclo', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: left thin, bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b+1, ncol_i, 'PRi', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b+2, ncol_i, 'BP', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b+3, ncol_i, 'PRf', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+1, ncol_i, 'BP1', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+2, ncol_i, 'BP2', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+3, ncol_i, 'BP3', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+4, ncol_i, 'BP4', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+5, ncol_i, 'BP5', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: bottom thin'))
            
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b+4, ncol_i, 'Diferencia', estilo_italict_b)
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b+4, ncol_i+1, Formula('IF(AND(C'+str(12+j*nrows_b)+'<>"";C'+str(13+j*nrows_b)+'<>"";C'+str(14+j*nrows_b)+'<>"");C'+str(13+j*nrows_b)+'-((C'+str(12+j*nrows_b)+'+C'+str(14+j*nrows_b)+')/2);"")'), easyxf('font: name Arial, italic False; alignment: horz center, vert center, wrap True; borders: left thin, bottom thick'))
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b+4, ncol_i+2, Formula('IF(AND(D'+str(12+j*nrows_b)+'<>"";D'+str(13+j*nrows_b)+'<>"";D'+str(14+j*nrows_b)+'<>"");D'+str(13+j*nrows_b)+'-((D'+str(12+j*nrows_b)+'+D'+str(14+j*nrows_b)+')/2);"")'), easyxf('font: name Arial, italic False; alignment: horz center, vert center, wrap True; borders: left thin, bottom thick'))
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b+4, ncol_i+3, Formula('IF(AND(E'+str(12+j*nrows_b)+'<>"";E'+str(13+j*nrows_b)+'<>"";E'+str(14+j*nrows_b)+'<>"");E'+str(13+j*nrows_b)+'-((E'+str(12+j*nrows_b)+'+E'+str(14+j*nrows_b)+')/2);"")'), easyxf('font: name Arial, italic False; alignment: horz center, vert center, wrap True; borders: left thin, bottom thick'))
            self.hoja_medidas.write_merge(nrows_i+nrows_c+j*nrows_b+5, nrows_i+nrows_c+j*nrows_b+5, ncol_i, ncol_i+1, 'Promedio:', estilo_italicr)
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b+5, ncol_i+2, Formula('IF(COUNT(C'+str(15+j*nrows_b)+':E'+str(15+j*nrows_b)+')>1;AVERAGE(C'+str(15+j*nrows_b)+':E'+str(15+j*nrows_b)+');"")'), estilo_flat_2_decimales)
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b+5, ncol_i+3, Formula('IF(D'+str(16+j*nrows_b)+'<>"";"'+mu+'m";"")'), estilo_italicl)
            self.hoja_medidas.write_merge(nrows_i+nrows_c+j*nrows_b+6, nrows_i+nrows_c+j*nrows_b+6, ncol_i, ncol_i+1, 'Desv'+ti+'o STD:', estilo_italicr)
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b+6, ncol_i+2, Formula('IF(COUNT(C'+str(15+j*nrows_b)+':E'+str(15+j*nrows_b)+')>2;STDEV(C'+str(15+j*nrows_b)+':E'+str(15+j*nrows_b)+');"")'), estilo_flat_2_decimales)
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b+6, ncol_i+3, Formula('IF(D'+str(17+j*nrows_b)+'<>"";"'+mu+'m";"")'), estilo_italicl)
            self.hoja_medidas.write_merge(nrows_i+nrows_c+j*nrows_b+7, nrows_i+nrows_c+j*nrows_b+7, ncol_i, ncol_i+1, 'Promedio del desv'+ti+'o STD:', estilo_italicrt_b)
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b+7, ncol_i+2, Formula('IF(AND(COUNT(C'+str(15+j*nrows_b)+':E'+str(15+j*nrows_b)+')<>"";D'+str(17+j*nrows_b)+'<>"");D'+str(17+j*nrows_b)+'/((COUNT(C'+str(15+j*nrows_b)+':E'+str(15+j*nrows_b)+')^(1/2)));"")'), estilo_flat_2_decimales)
            self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b+7, ncol_i+3, Formula('IF(D'+str(18+j*nrows_b)+'<>"";"'+mu+'m";"")'), estilo_italiclt_b)
            self.hoja_medidas.write_merge(nrows_i+nrows_p-1+j*nrows_b, nrows_i+nrows_p-1+j*nrows_b, ncol_i, ncol_i+3, 'Mediciones de los v'+te+'rtices y el punto central del BP', estilo_italict)
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+6, ncol_i, 'Max.:', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+6, ncol_i+1, Formula('IF(COUNT(C'+str(21+j*nrows_b)+':C'+str(25+j*nrows_b)+')>4;MAX(C'+str(21+j*nrows_b)+':C'+str(25+j*nrows_b)+');"")'), easyxf('font: name Arial, italic False; alignment: horz center, vert center, wrap True; borders: left thin, bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+6, ncol_i+2, Formula('IF(COUNT(D'+str(21+j*nrows_b)+':D'+str(25+j*nrows_b)+')>4;MAX(D'+str(21+j*nrows_b)+':D'+str(25+j*nrows_b)+');"")'), easyxf('font: name Arial, italic False; alignment: horz center, vert center, wrap True; borders: left thin, bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+6, ncol_i+3, Formula('IF(COUNT(E'+str(21+j*nrows_b)+':E'+str(25+j*nrows_b)+')>4;MAX(E'+str(21+j*nrows_b)+':E'+str(25+j*nrows_b)+');"")'), easyxf('font: name Arial, italic False; alignment: horz center, vert center, wrap True; borders: left thin, bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+7, ncol_i, 'Min.', easyxf('font: name Arial, italic True; alignment: horz center, vert center, wrap True; borders: bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+7, ncol_i+1, Formula('IF(COUNT(C'+str(21+j*nrows_b)+':C'+str(25+j*nrows_b)+')>4;MIN(C'+str(21+j*nrows_b)+':C'+str(25+j*nrows_b)+');"")'), easyxf('font: name Arial, italic False; alignment: horz center, vert center, wrap True; borders: left thin, bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+7, ncol_i+2, Formula('IF(COUNT(D'+str(21+j*nrows_b)+':D'+str(25+j*nrows_b)+')>4;MIN(D'+str(21+j*nrows_b)+':D'+str(25+j*nrows_b)+');"")'), easyxf('font: name Arial, italic False; alignment: horz center, vert center, wrap True; borders: left thin, bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+7, ncol_i+3, Formula('IF(COUNT(E'+str(21+j*nrows_b)+':E'+str(25+j*nrows_b)+')>4;MIN(E'+str(21+j*nrows_b)+':E'+str(25+j*nrows_b)+');"")'), easyxf('font: name Arial, italic False; alignment: horz center, vert center, wrap True; borders: left thin, bottom thin'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+8, ncol_i, 'Diferencia:', estilo_italict_b)
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+8, ncol_i+1, Formula('IF(AND(C'+str(26+j*nrows_b)+'<>"";C'+str(27+j*nrows_b)+'<>"");C'+str(26+j*nrows_b)+'-C'+str(27+j*nrows_b)+';"")'), easyxf('font: name Arial, italic False; alignment: horz center, vert center, wrap True; borders: left thin, bottom thick'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+8, ncol_i+2, Formula('IF(AND(D'+str(26+j*nrows_b)+'<>"";D'+str(27+j*nrows_b)+'<>"");D'+str(26+j*nrows_b)+'-D'+str(27+j*nrows_b)+';"")'), easyxf('font: name Arial, italic False; alignment: horz center, vert center, wrap True; borders: left thin, bottom thick'))
            self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+8, ncol_i+3, Formula('IF(AND(E'+str(26+j*nrows_b)+'<>"";E'+str(27+j*nrows_b)+'<>"");E'+str(26+j*nrows_b)+'-E'+str(27+j*nrows_b)+';"")'), easyxf('font: name Arial, italic False; alignment: horz center, vert center, wrap True; borders: left thin, bottom thick'))
            

            
            for i in range(24):
                if i<15:
                    self.hoja_medidas.write(nrows_i+nrows_p+j*nrows_b+1+i%5, ncol_i+1+i//5, bloques[j].medidas[i], estilo_flat_gray)
                else:
                    self.hoja_medidas.write(nrows_i+nrows_c+j*nrows_b+1+i%3, ncol_i-4+i//3, bloques[j].medidas[i], estilo_flat_gray)
                
            for i in range(20):
                self.hoja_medidas.row(nrows_i+j*nrows_b+i).height_mismatch = 1
                self.hoja_medidas.row(nrows_i+j*nrows_b+i).height = 400

            # datos de la temperatura

            self.hoja_medidas.write_merge(j*nrows_b+nrows_i+10, j*nrows_b+nrows_i+10, ncol_i+4, ncol_i + 6, '', estilo_italict)
            self.hoja_medidas.write_merge(j*nrows_b+nrows_i+11, j*nrows_b+nrows_i+12, ncol_i+4, ncol_i + 6, 'Par'+ta+'metros de temperatura del\nambiente y los bloques comparados', estilo_italict)
            #~ self.hoja_medidas.write_merge(j*nrows_b+nrows_i+12, j*nrows_b+nrows_i+12, ncol_i+4, ncol_i + 6, '', estilo_italict)
            self.hoja_medidas.write_merge(j*nrows_b+nrows_i+13, j*nrows_b+nrows_i+14, ncol_i+4, ncol_i + 6, 'Variaci'+to+'n de la temperatura ambiente\nen el intervalo de temp. de 20 '+gra+'C '+pm+'0.5'+gra+'C', estilo_italict_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+15, ncol_i+4, 'Var. de Temp.', estilo_italict_lb)
            if isinstance(bloques[j].t_max, float):
                self.hoja_medidas.write(j*nrows_b+nrows_i+15, ncol_i+5, bloques[j].t_max - bloques[j].t_min, easyxf('font: name Arial, italic True, bold True; alignment: horz center, vert center, wrap True; borders: left thin, right thin, top thin, bottom thick; pattern: pattern solid, fore_color gray25', num_format_str="0.##"))
            else:
                self.hoja_medidas.write(j*nrows_b+nrows_i+15, ncol_i+5, 0.5, easyxf('font: name Arial, italic True, bold True; alignment: horz center, vert center, wrap True; borders: left thin, right thin, top thin, bottom thick; pattern: pattern solid, fore_color gray25', num_format_str="0.##"))
            self.hoja_medidas.write(j*nrows_b+nrows_i+15, ncol_i+6, Formula('IF(G'+str(24+j*nrows_b)+'<>"";"'+gra+'C (max-min)";"")'), estilo_italict_rb)
            self.hoja_medidas.write_merge(j*nrows_b+nrows_i+16, j*nrows_b+nrows_i+17, ncol_i+4, ncol_i + 6, 'Diferencia de temperatura\nentre los bloques a comparar', estilo_italict_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+18, ncol_i+4, 'Dif. PR y BP', estilo_italict_lb)
            self.hoja_medidas.write(j*nrows_b+nrows_i+18, ncol_i+5, 0.05, easyxf('font: name Arial, italic True, bold True; alignment: horz center, vert center, wrap True; borders: left thin, right thin, top thin, bottom thick; pattern: pattern solid, fore_color gray25'))
            self.hoja_medidas.write(j*nrows_b+nrows_i+18, ncol_i+6, Formula('IF(G'+str(27+j*nrows_b)+'<>"";"'+gra+'C";"")'), estilo_italict_rb)
            
            # datos de adherencia
            
            self.hoja_medidas.write(j*nrows_b+nrows_i+19, ncol_i+4, 'Adherencia: ', estilo_italict_lb)
            self.hoja_medidas.write(j*nrows_b+nrows_i+19, ncol_i+5, bloques[j].adherencia, easyxf('font: name Arial, italic True, bold True; alignment: horz center, vert center, wrap True; borders: left thin, right thin, top thin, bottom thick; pattern: pattern solid, fore_color gray25'))

            # calculos segun la norma

            self.hoja_medidas.write_merge(j*nrows_b+nrows_i+12, j*nrows_b+nrows_i+12, ncol_i+7, ncol_i + 8, 'Grado ISO 3650', estilo_italict)
            self.hoja_medidas.write(j*nrows_b+nrows_i+13, ncol_i+7, 'Cal. e:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+14, ncol_i+7, 'Cal. v:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+15, ncol_i+7, 'Cal. Final:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+13, ncol_i+8, Formula('IF(AND(J'+str(15+j*nrows_b)+'<>"";J'+str(17+j*nrows_b)+'<>"");IF((ABS(J'+str(17+j*nrows_b)+'))<=(0.1+0.002*J'+str(15+j*nrows_b)+');"0";IF((ABS(J'+str(17+j*nrows_b)+'))<=(0.2+0.004*J'+str(15+j*nrows_b)+');"1";IF((ABS(J'+str(17+j*nrows_b)+'))<=(0.4+0.008*J'+str(15+j*nrows_b)+');"2";IF(ABS(J'+str(17+j*nrows_b)+')>0.4+0.008*J'+str(15+j*nrows_b)+';"FC";""))));"")'), estilo_italict_r)
            self.hoja_medidas.write(j*nrows_b+nrows_i+14, ncol_i+8, Formula('IF(AND(J'+str(15+j*nrows_b)+'<>"";J'+str(19+j*nrows_b)+'<>"");IF(J'+str(19+j*nrows_b)+'<=(0.1+0.0003*J'+str(15+j*nrows_b)+');"0";IF(J'+str(19+j*nrows_b)+'<=(0.16+0.00045*J'+str(15+j*nrows_b)+');"1";IF(J'+str(19+j*nrows_b)+'<=(0.3+0.0007*J'+str(15+j*nrows_b)+');"2";IF(J'+str(19+j*nrows_b)+'>0.3+0.0007*J'+str(15+j*nrows_b)+';"FC";""))));"")'), estilo_italict_r)
            self.hoja_medidas.write(j*nrows_b+nrows_i+15, ncol_i+8, Formula('IF(AND(J'+str(22+j*nrows_b)+'<>"";J'+str(23+j*nrows_b)+'<>"");IF(ABS(J'+str(22+j*nrows_b)+')<ABS(J'+str(23+j*nrows_b)+');ABS(J23);IF(ABS(J'+str(22+j*nrows_b)+')>ABS(J'+str(23+j*nrows_b)+');ABS(J'+str(22+j*nrows_b)+');IF(ABS(J'+str(22+j*nrows_b)+')=ABS(J'+str(23+j*nrows_b)+');ABS(J'+str(23+j*nrows_b)+');IF(ABS(J'+str(22+j*nrows_b)+')<>ABS(J'+str(23+j*nrows_b)+');"FC";"FC"))));"")'), estilo_italict_r)
            self.hoja_medidas.write_merge(j*nrows_b+nrows_i+16, j*nrows_b+nrows_i+16, ncol_i+7, ncol_i + 8, 'Grado ISO 3650 + Inc. Ep.', estilo_italict)
            self.hoja_medidas.write(j*nrows_b+nrows_i+17, ncol_i+7, 'Cal. e:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+18, ncol_i+7, 'Cal. v:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+19, ncol_i+7, 'Cal. Final:', estilo_italicrt_l)
            self.hoja_medidas.write(j*nrows_b+nrows_i+17, ncol_i+8, Formula('IF(AND(J'+str(15+j*nrows_b)+'<>"";J'+str(17+j*nrows_b)+'<>"";J'+str(18+j*nrows_b)+'<>"");IF((ABS(J'+str(17+j*nrows_b)+')+J'+str(18+j*nrows_b)+')<=(0.1+0.002*J'+str(15+j*nrows_b)+');"0";IF((ABS(J'+str(17+j*nrows_b)+')+J'+str(18+j*nrows_b)+')<=(0.2+0.004*J'+str(15+j*nrows_b)+');"1";IF((ABS(J'+str(17+j*nrows_b)+')+J'+str(18+j*nrows_b)+')<=(0.4+0.008*J'+str(15+j*nrows_b)+');"2";IF((ABS(J'+str(17+j*nrows_b)+')+J'+str(18+j*nrows_b)+')>0.4+0.008*J'+str(15+j*nrows_b)+';"FC";""))));"")'), estilo_italict_r)
            self.hoja_medidas.write(j*nrows_b+nrows_i+18, ncol_i+8, Formula('IF(AND(J'+str(15+j*nrows_b)+'<>"";J'+str(19+j*nrows_b)+'<>"");IF(J'+str(19+j*nrows_b)+'+J'+str(20+j*nrows_b)+'<=(0.1+0.0003*J'+str(15+j*nrows_b)+');"0";IF(J'+str(19+j*nrows_b)+'+J'+str(20+j*nrows_b)+'<=(0.16+0.00045*J'+str(15+j*nrows_b)+');"1";IF(J'+str(19+j*nrows_b)+'+J'+str(20+j*nrows_b)+'<=(0.3+0.0007*J'+str(15+j*nrows_b)+');"2";IF(J'+str(19+j*nrows_b)+'+J'+str(20+j*nrows_b)+'>0.3+0.0007*J'+str(15+j*nrows_b)+';"FC";""))));"")'), estilo_italict_r)
            self.hoja_medidas.write(j*nrows_b+nrows_i+19, ncol_i+8, Formula('IF(AND(J'+str(26+j*nrows_b)+'<>"";J'+str(27+j*nrows_b)+'<>"");IF(ABS(J'+str(26+j*nrows_b)+')<ABS(J'+str(27+j*nrows_b)+');ABS(J'+str(27+j*nrows_b)+');IF(ABS(J'+str(26+j*nrows_b)+')>ABS(J'+str(27+j*nrows_b)+');ABS(J'+str(26+j*nrows_b)+');IF(ABS(J'+str(26+j*nrows_b)+')=ABS(J'+str(27+j*nrows_b)+');ABS(J'+str(27+j*nrows_b)+');IF(ABS(J'+str(26+j*nrows_b)+')<>ABS(J'+str(27+j*nrows_b)+');"FC";"FC"))));"")'), estilo_italict_r)

            self.hoja_medidas.write_merge(j*nrows_b+nrows_i+20, j*nrows_b+nrows_i+23, 0, 10, '', estilo_grayt_t)

            ## # hoja de incertidumbres

            self.hoja_incertidumbres.row(nrowsi_i+j*nrows_b).height_mismatch = 1
            self.hoja_incertidumbres.row(nrowsi_i+j*nrows_b).height = 700

            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b, nrowsi_i+j*nrows_b+22, 0, 0, 'Pieza\nN'+gra+' '+str(j+1), estiloxl1)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b, nrowsi_i+j*nrows_b, 1, 3, 'Fuente de incertidumbre', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+1, nrowsi_i+j*nrows_b+1, 1, 3, 'Dif. prom. en pto. central entre PR y BP.', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+2, nrowsi_i+j*nrows_b+2, 1, 3, 'Repetibilidad', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+3, nrowsi_i+j*nrows_b+3, 1, 3, 'Inc. de Calibraci'+to+'n del BC por CEFIS', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+4, nrowsi_i+j*nrows_b+4, 1, 3, 'Longitud del PR a 20 '+gra+'C', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+5, nrowsi_i+j*nrows_b+5, 1, 3, 'Inc. de cal. de los PR (CEFIS)  + tend. x tiempo', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+6, nrowsi_i+j*nrows_b+6, 1, 3, 'Componente independiente para PR', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+7, nrowsi_i+j*nrows_b+7, 1, 3, 'Componente dependiente de L para PR', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+8, nrowsi_i+j*nrows_b+8, 1, 3, 'Tendencia o deriva en el tiempo para PR =', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+9, nrowsi_i+j*nrows_b+9, 1, 3, 'Coef. de expansi'+to+'n t'+te+'rmica del PR. ', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+10, nrowsi_i+j*nrows_b+10, 1, 3, 'Coef. de expansi'+to+'n t'+te+'rmica del BP. ', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+11, nrowsi_i+j*nrows_b+11, 1, 3, 'Dif. de temp. de cal. medida con to = 20 '+gra+'C', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+12, nrowsi_i+j*nrows_b+12, 1, 3, 'Lectura del term'+to+'metro o registrador', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+13, nrowsi_i+j*nrows_b+13, 1, 3, 'Variacion de la temp. ambiental con los 20 '+gra+'C', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+14, nrowsi_i+j*nrows_b+14, 1, 3, 'Inc. de calibracion del termometro por CEFIS', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+15, nrowsi_i+j*nrows_b+15, 1, 3, 'Dif. entre el PR y el BP.', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+18, nrowsi_i+j*nrows_b+18, 1, 2, 'Efectos de temp. en PR', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+19, nrowsi_i+j*nrows_b+19, 1, 2, 'Efectos de temp. en BP', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+20, nrowsi_i+j*nrows_b+20, 1, 2, 'Diferencia de temp. entre PR y BP', estilo_flatr)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+22, nrowsi_i+j*nrows_b+22, 1, 3, 'Incertidumbre con 95% de N.C. =', estilo_boldr)#h2c1

            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+18, 3, 'u('+alfa+'pr).u('+theta+'pr)', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+19, 3, 'u('+alfa+'bp).u('+theta+'bp)', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+20, 3, 'u('+alfa+'pr).u('+delta+theta+')', estilo_flat)

            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b, 4, 'S'+ti+'mbolo', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1, 4, 'd', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+4, 4, 'Lpr', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+8, 4, Formula('IF('+"'FO02-Resultados de Calibracion'"+'!G'+str(12+j*nrows_b)+'="KOBA";COUNT('+"'Deriva tiempo acero Koba'"+'!E4;'+"'Deriva tiempo acero Koba'"+'!G4;'+"'Deriva tiempo acero Koba'"+'!I4);3)'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+9, 4, alfa+'pb', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+10, 4, alfa+'bi', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+11, 4, theta+'bp', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+15, 4, delta+theta, estilo_flat)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+17, nrowsi_i+j*nrows_b+17, 4, 9, 'Incertidumbres de 2'+gra+' orden (terminos cruzados).', estilo_flat)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+18+l, 4, '-', estilo_flat)
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+22, nrowsi_i+j*nrows_b+22, 4, 7, Formula('IF(T'+str(28+j*nrows_b)+'<>"";CONCATENATE("'+pm+' ( ";ROUND(TINV(0.0455;M'+str(22+j*nrows_b)+');0);" * (((";ROUND((R'+str(7+j*nrows_b)+'^2+R'+str(12+j*nrows_b)+'^2)^(1/2);0);"^2) + (";ROUND((R'+str(13+j*nrows_b)+'^2+R'+str(15+j*nrows_b)+'^2+R'+str(16+j*nrows_b)+'^2+R'+str(17+j*nrows_b)+'^2+R'+str(21+j*nrows_b)+'^2+R'+str(24+j*nrows_b)+'^2+R'+str(25+j*nrows_b)+'^2+R'+str(26+j*nrows_b)+'^2)^(1/2);1);"^2) * L^2))^(1/2))) nm.");"")'), estilo_flat)
            
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1, 5, 1, estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+4, 5, 1, estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+8, 5, Formula('"A'+gn+'os ; Tend. ="'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+9, 5, 'Lpr. '+ theta +'pr', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+10, 5, 'Lpr.('+delta+theta+' + '+theta+'pr)', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+11, 5, 'Lpr.('+alfa+'pr - '+alfa+'bp)', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+15, 5, 'Lpr. '+alfa+'bp)', estilo_flat)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+18+l, 5, 'Lpr', estilo_flat)

            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b, nrowsi_i+j*nrows_b, 6, 7, 'Incert. Expandida\nRango - Variaci'+to+'n M'+ta+'xima', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1, 6, Formula('IF('+"'FO02-Resultados de Calibracion'"+'!D'+str(18+j*nrows_b)+'<>"";'+"'FO02-Resultados de Calibracion'"+'!D'+str(18+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+2, 6, Formula('IF('+"'FO02-Resultados de Calibracion'"+'!D'+str(18+j*nrows_b)+'<>"";'+"'FO02-Resultados de Calibracion'"+'!D'+str(18+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+3, 6, 0.06, easyxf('font: name Arial; alignment: horz center, vert center, wrap True; pattern: pattern solid, fore_color gray25'))
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+4, 6, Formula('IF(G'+str(11+j*nrows_b)+'<>"";G'+str(11+j*nrows_b)+'*0.001;"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+5, 6, Formula('IF(AND('+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+'<>"";G'+str(12+j*nrows_b)+'<>"";G'+str(13+j*nrows_b)+'<>"";E'+str(14+j*nrows_b)+'<>"");(((G'+str(12+j*nrows_b)+'^2)+(G'+str(13+j*nrows_b)+'^2+G'+str(14+j*nrows_b)+'^2)*('+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+')^2)^(1/2));"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+6, 6, 21, easyxf('font: name Arial; alignment: horz center, vert center, wrap True; pattern: pattern solid, fore_color gray25'))
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+7, 6, 0.51, easyxf('font: name Arial; alignment: horz center, vert center, wrap True; pattern: pattern solid, fore_color gray25'))
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+8, 6, Formula('IF('+"'FO02-Resultados de Calibracion'"+'!D2='+"'FO02-Resultados de Calibracion'"+'!L4;LOOKUP('+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+';'+"'FO04-Datos de Patrones'"+'!A4:A125;'+"'FO04-Datos de Patrones'"+'!H4:H125);IF('+"'FO02-Resultados de Calibracion'"+'!D2='+"'FO02-Resultados de Calibracion'"+'!L5;LOOKUP('+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+';'+"'FO04-Datos de Patrones'"+'!J4:J125;'+"'FO04-Datos de Patrones'"+'!Q4:Q125);""))'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+9, 6, Formula('IF('+"'FO02-Resultados de Calibracion'"+'!G'+str(16+j*nrows_b)+'<>"";'+"'FO02-Resultados de Calibracion'"+'!G'+str(16+j*nrows_b)+'*10%;"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+10, 6, Formula('IF('+"'FO02-Resultados de Calibracion'"+'!J'+str(16+j*nrows_b)+'<>"";'+"'FO02-Resultados de Calibracion'"+'!J'+str(16+j*nrows_b)+'*10%;"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+11, 6, Formula('IF(K'+str(17+j*nrows_b)+'<>"";K'+str(17+j*nrows_b)+'*2;"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+12, 6, 0.01, estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+13, 6, Formula("'FO02-Resultados de Calibracion'"+'!G'+str(24+j*nrows_b)), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+14, 6, 0.08, easyxf('font: name Arial; alignment: horz center, vert center, wrap True; pattern: pattern solid, fore_color gray25'))
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+15, 6, Formula("'FO02-Resultados de Calibracion'"+'!G'+str(27+j*nrows_b)), estilo_flat_2_decimales)

            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1, 7, Formula('IF(G'+str(7+j*nrows_b)+'<>"";"'+mu+'m.";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+2, 7, Formula('IF(G'+str(8+j*nrows_b)+'<>"";"'+mu+'m.";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+3, 7, Formula('IF(G'+str(9+j*nrows_b)+'<>"";"'+mu+'m.";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+4, 7, Formula('IF(G'+str(10+j*nrows_b)+'<>"";"'+mu+'m.";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+5, 7, Formula('IF(G'+str(11+j*nrows_b)+'<>"";"nm.";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+6, 7, Formula('IF(G'+str(12+j*nrows_b)+'<>"";"nm.";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+7, 7, Formula('IF(G'+str(13+j*nrows_b)+'<>"";"*L(nm)";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+8, 7, Formula('IF(G'+str(14+j*nrows_b)+'<>"";"*L(nm)";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+9, 7, Formula('IF(G'+str(15+j*nrows_b)+'<>"";"ppm/'+gra+'C";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+10, 7, Formula('IF(G'+str(16+j*nrows_b)+'<>"";"ppm/'+gra+'C";"")'), estilo_flat)
            for l in range(5): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+11+l, 7, Formula('IF(G'+str(17+l+j*nrows_b)+'<>"";"'+gra+'C";"")'), estilo_flat)

            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b, 8, 'Tipo', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1, 8, 'BN', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+2, 8, 'AN', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+3, 8, 'BN', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+4, 8, 'BN', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+6, 8, 'BN', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+7, 8, 'BN', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+8, 8, 'AN', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+9, 8, 'BR', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+10, 8, 'BR', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+11, 8, 'BN', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+12, 8, 'BR', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+13, 8, 'BR', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+14, 8, 'BN', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+15, 8, 'BR', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+22, 8, '=', estilo_bold)

            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b, 9, 'Factor', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1, 9, 1, estilo_flat)
            for l in range(14):
                self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+2+l, 9, Formula('IF(I'+str(8+l+j*nrows_b)+'<>"";IF(I'+str(8+l+j*nrows_b)+'="AN";1;IF(I'+str(8+l+j*nrows_b)+'="BN";2;IF(I'+str(8+l+j*nrows_b)+'="BT";((6)^(1/2));IF(I'+str(8+l+j*nrows_b)+'="BR";((3)^(1/2));IF(I'+str(8+l+j*nrows_b)+'="BD";((12)^(1/2));0)))));"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+22, 9, Formula('IF(T'+str(28+j*nrows_b)+'<>"";(TINV(0.0455;M'+str(22+j*nrows_b)+')*((((((R'+str(7+j*nrows_b)+'^2+R'+str(12+j*nrows_b)+'^2)^(1/2))^2)+((R'+str(13+j*nrows_b)+'^2+R'+str(15+j*nrows_b)+'^2+R'+str(16+j*nrows_b)+'^2+R'+str(17+j*nrows_b)+'^2+R'+str(21+j*nrows_b)+'^2+R'+str(24+j*nrows_b)+'^2+R'+str(25+j*nrows_b)+'^2+R'+str(26+j*nrows_b)+'^2+R'+str(8+j*nrows_b)+'^2+R'+str(9+j*nrows_b)+'^2)^(1/2)^2)*'+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+'^2))^(1/2)));"")'), easyxf('font: name Arial, bold True; alignment: horizontal center, vertical center, wrap True;', num_format_str="0"))

            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b, nrowsi_i+j*nrows_b, 10, 11, 'Incertidumbre Est'+ta+'ndar (ui)', estilo_flat)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1+l, 10, Formula('G'+str(7+l+j*nrows_b)+'/J'+str(7+l+j*nrows_b)+'*1000'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+4, 10, Formula('K'+str(11+j*nrows_b)), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+5, 10, Formula('IF(AND('+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+'<>"";G'+str(12+j*nrows_b)+'<>"";G'+str(13+j*nrows_b)+'<>"";E'+str(14+j*nrows_b)+'<>"");(((K'+str(12+j*nrows_b)+'^2)+(K'+str(13+j*nrows_b)+'^2+K'+str(14+j*nrows_b)+'^2)*('+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+')^2)^(1/2));"")'), estilo_flat_2_decimales)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+6+l, 10, Formula('G'+str(12+l+j*nrows_b)+'/J'+str(12+l+j*nrows_b)+''), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+9, 10, Formula('IF(G'+str(15+j*nrows_b)+'<>"";G'+str(15+j*nrows_b)+'/J'+str(15+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+10, 10, Formula('IF(G'+str(16+j*nrows_b)+'<>"";G'+str(16+j*nrows_b)+'/J'+str(16+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+11, 10, Formula('IF(G'+str(20+j*nrows_b)+'<>"";((G'+str(18+j*nrows_b)+'/J'+str(18+j*nrows_b)+')^2+(G'+str(19+j*nrows_b)+'/J'+str(19+j*nrows_b)+')^2+(G'+str(20+j*nrows_b)+'/J'+str(20+j*nrows_b)+')^2)^(1/2);"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+15, 10, Formula('G'+str(21+j*nrows_b)+'/J'+str(21+j*nrows_b)), estilo_flat_2_decimales)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+18+l, 10, Formula('IF(AND(K'+str(15+l+j*nrows_b)+'<>"";K'+str(17+j*nrows_b)+'<>"");K'+str(15+l+j*nrows_b)+'*K'+str(17+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+18+l, 10, Formula('IF(AND(K'+str(15+j*nrows_b)+'<>"";K'+str(21+j*nrows_b)+'<>"");K'+str(15+j*nrows_b)+'*K'+str(21+j*nrows_b)+';"")'), estilo_flat_2_decimales)

            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1, 11, Formula('IF(K'+str(7+j*nrows_b)+'<>"";"nm.";"")'), estilo_flat)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+4+l, 11, Formula('IF(K'+str(10+l+j*nrows_b)+'<>"";"nm.";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+7, 11, Formula('IF(K'+str(13+j*nrows_b)+'<>"";"*L (nm)";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+8, 11, Formula('IF(K'+str(14+j*nrows_b)+'<>"";"*L (nm)";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+9, 11, Formula('IF(K'+str(15+j*nrows_b)+'<>"";"ppm/'+gra+'C";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+10, 11, Formula('IF(K'+str(16+j*nrows_b)+'<>"";"ppm/'+gra+'C";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+11, 11, Formula('IF(K'+str(17+j*nrows_b)+'<>"";"'+gra+'C";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+15, 11, Formula('IF(K'+str(21+j*nrows_b)+'<>"";"'+gra+'C";"")'), estilo_flat)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+18+l, 11, Formula('IF(K'+str(24+l+j*nrows_b)+'<>"";"ppm";"")'), estilo_flat)

            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b, 12, nu+'i', estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+2, 12, 2, estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+4, 12, 100, estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+3, 12, 100, estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+9, 12, 100, estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+10, 12, 100, estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+11, 12, 100, estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+15, 12, 100, estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+16, 12, Formula('IF(AND(T'+str(22+j*nrows_b)+'<>"";SUM(U'+str(7+j*nrows_b)+':U'+str(21+j*nrows_b)+')<>0);(T'+str(22+j*nrows_b)+'^4)/(SUM(U'+str(7+j*nrows_b)+':U'+str(21+j*nrows_b)+'));"")'), estilo_flat)
            

            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b, nrowsi_i+j*nrows_b, 13, 14, 'ci', estilo_flat)
            for l in range(4): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1+l, 13, 1, estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+8, 13, 1, estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+9, 13, Formula('IF(AND('+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+'<>"";'+"'FO02-Resultados de Calibracion'"+'!G'+str(24+j*nrows_b)+'<>"");'+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+'*ABS('+"'FO02-Resultados de Calibracion'"+'!G'+str(24+j*nrows_b)+'/2);"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+10, 13, Formula('IF(AND('+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+'<>"";'+"'FO02-Resultados de Calibracion'"+'!G'+str(27+j*nrows_b)+'<>"";'+"'FO02-Resultados de Calibracion'"+'!G'+str(24+j*nrows_b)+'<>"");'+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+'*('+"'FO02-Resultados de Calibracion'"+'!G'+str(27+j*nrows_b)+'+ABS('+"'FO02-Resultados de Calibracion'"+'!G'+str(24+j*nrows_b)+'/2));"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+11, 13, Formula('IF(AND('+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+'<>"";'+"'FO02-Resultados de Calibracion'"+'!G'+str(16+j*nrows_b)+'<>"";'+"'FO02-Resultados de Calibracion'"+'!J'+str(16+j*nrows_b)+'<>"");'+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+'*ABS('+"'FO02-Resultados de Calibracion'"+'!G'+str(16+j*nrows_b)+'-'+"'FO02-Resultados de Calibracion'"+'!J'+str(16+j*nrows_b)+');"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+15, 13, Formula('IF(AND('+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+'<>"";'+"'FO02-Resultados de Calibracion'"+'!G'+str(16+j*nrows_b)+'<>"");'+"'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)+'*'+"'FO02-Resultados de Calibracion'"+'!G'+str(16+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+18+l, 13, Formula("'FO02-Resultados de Calibracion'"+'!G'+str(15+j*nrows_b)), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+22, 13, 'U(L) 95% =', estilo_bold)

            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1, 14, Formula('IF(N'+str(7+j*nrows_b)+'<>"";"ad.";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+4, 14, Formula('IF(N'+str(10+j*nrows_b)+'<>"";"ad.";"")'), estilo_flat)
            for l in range(7): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+9+l, 14, Formula('IF(N'+str(15+l+j*nrows_b)+'<>"";"ppm/'+gra+'C";"")'), estilo_flat)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+18+l, 14, Formula('IF(N'+str(24+l+j*nrows_b)+'<>"";"nm.";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+22, 14, Formula('IF(T'+str(28+j*nrows_b)+'<>"";((((($P'+str(7+j*nrows_b)+'^2+$P'+str(10+j*nrows_b)+'^2+P'+str(8+j*nrows_b)+'^2+P'+str(9+j*nrows_b)+'^2+$P'+str(15+j*nrows_b)+'^2+$P'+str(16+j*nrows_b)+'^2+$P'+str(17+j*nrows_b)+'^2+$P'+str(21+j*nrows_b)+'^2+$P'+str(24+j*nrows_b)+'^2+$P'+str(25+j*nrows_b)+'^2+$P'+str(26+j*nrows_b)+'^2)))^(1/2))/1000)*(TINV(0.0455;$M'+str(22+j*nrows_b)+'));"")'), estilo_bold_3_decimales)

            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b, nrowsi_i+j*nrows_b, 15, 18, 'ci x ui', estilo_flat)
            for l in range(4): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1+l, 15, Formula('IF(AND(K'+str(7+l+j*nrows_b)+'<>"";N'+str(7+l+j*nrows_b)+'<>"");K'+str(7+l+j*nrows_b)+'*N'+str(7+l+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            for l in range(4): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+8+l, 15, Formula('IF(AND(K'+str(14+l+j*nrows_b)+'<>"";N'+str(14+l+j*nrows_b)+'<>"");K'+str(14+l+j*nrows_b)+'*N'+str(14+l+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+15, 15, Formula('IF(AND(K'+str(21+j*nrows_b)+'<>"";N'+str(21+j*nrows_b)+'<>"");K'+str(21+j*nrows_b)+'*N'+str(21+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+18+l, 15, Formula('IF(AND(K'+str(24+l+j*nrows_b)+'<>"";N'+str(24+l+j*nrows_b)+'<>"");K'+str(24+l+j*nrows_b)+'*N'+str(24+l+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+22, 15, Formula('IF(O'+str(28+j*nrows_b)+'<>"";"'+mu+'m.";"")'), estilo_bold)
            
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1, 16, Formula('IF(P'+str(7+j*nrows_b)+'<>"";"nm.";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+4, 16, Formula('IF(P'+str(10+j*nrows_b)+'<>"";"nm.";"")'), estilo_flat)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+9+l, 16, Formula('IF(P'+str(15+l+j*nrows_b)+'<>"";"nm.";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+15, 16, Formula('IF(P'+str(21+j*nrows_b)+'<>"";"nm.";"")'), estilo_flat)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+18+l, 16, Formula('IF(P'+str(24+l+j*nrows_b)+'<>"";"nm.";"")'), estilo_flat)

            for l in range(4): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1+l, 17, Formula('IF(AND(K'+str(7+l+j*nrows_b)+'<>"";N'+str(7+l+j*nrows_b)+'<>"");K'+str(7+l+j*nrows_b)+'*N'+str(7+l+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+6, 17, Formula('IF(AND(E'+str(14+j*nrows_b)+'<>"";K'+str(12+j*nrows_b)+'<>"";N'+str(10+j*nrows_b)+'<>"");K'+str(12+j*nrows_b)+'*N'+str(10+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+7, 17, Formula('IF(AND(E'+str(14+j*nrows_b)+'<>"";K'+str(13+j*nrows_b)+'<>"";K'+str(14+j*nrows_b)+'<>"");(K'+str(13+j*nrows_b)+'^2+K'+str(14+j*nrows_b)+'^2)^(1/2);"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+9, 17, Formula('IF(AND('+"'FO02-Resultados de Calibracion'"+'!G'+str(24+j*nrows_b)+'<>"";K'+str(15+j*nrows_b)+'<>"");ABS('+"'FO02-Resultados de Calibracion'"+'!G'+str(24+j*nrows_b)+'/2)*K'+str(15+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+10, 17, Formula('IF(AND('+"'FO02-Resultados de Calibracion'"+'!G'+str(27+j*nrows_b)+'<>"";'+"'FO02-Resultados de Calibracion'"+'!G'+str(24+j*nrows_b)+'<>"";K'+str(16+j*nrows_b)+'<>"");('+"'FO02-Resultados de Calibracion'"+'!G'+str(27+j*nrows_b)+'+ABS('+"'FO02-Resultados de Calibracion'"+'!G'+str(24+j*nrows_b)+'/2))*K'+str(16+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+11, 17, Formula('IF(AND('+"'FO02-Resultados de Calibracion'"+'!G'+str(16+j*nrows_b)+'<>"";'+"'FO02-Resultados de Calibracion'"+'!J'+str(16+j*nrows_b)+'<>"";K'+str(17+j*nrows_b)+'<>"");ABS('+"'FO02-Resultados de Calibracion'"+'!G'+str(16+j*nrows_b)+'-'+"'FO02-Resultados de Calibracion'"+'!J'+str(16+j*nrows_b)+')*K'+str(17+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+15, 17, Formula('IF(AND('+"'FO02-Resultados de Calibracion'"+'!G'+str(16+j*nrows_b)+'<>"";K'+str(21+j*nrows_b)+'<>"");'+"'FO02-Resultados de Calibracion'"+'!G'+str(16+j*nrows_b)+'*K'+str(21+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+18+l, 17, Formula('K'+str(24+l+j*nrows_b)), estilo_flat_2_decimales)

            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1, 18, Formula('IF(R'+str(7+j*nrows_b)+'<>"";"nm.";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+6, 18, Formula('IF(R'+str(12+j*nrows_b)+'<>"";"nm.";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+7, 18, Formula('IF(R'+str(13+j*nrows_b)+'<>"";"x L (nm)";"")'), estilo_flat)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+9+l, 18, Formula('IF(R'+str(15+l+j*nrows_b)+'<>"";"x L (nm)";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+15, 18, Formula('IF(R'+str(21+j*nrows_b)+'<>"";"x L (nm)";"")'), estilo_flat)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+18+l, 18, Formula('IF(R'+str(24+l+j*nrows_b)+'<>"";"x L (nm)";"")'), estilo_flat)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+22, 18, 'Verif.=', estilo_bold)

            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b, 19, '(ci x ui)'+cuadrado, estilo_flat)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1+l, 19, Formula('P'+str(7+l+j*nrows_b)+'^2'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+4, 19, Formula('IF(P'+str(10+j*nrows_b)+'<>"";P'+str(10+j*nrows_b)+'^2;"")'), estilo_flat_2_decimales)
            for l in range(5): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+7+l, 19, Formula('IF(P'+str(13+l+j*nrows_b)+'<>"";P'+str(13+l+j*nrows_b)+'^2;"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+15, 19, Formula('IF(P'+str(21+j*nrows_b)+'<>"";P'+str(21+j*nrows_b)+'^2;"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+16, 19, Formula('IF(SUM(T'+str(7+j*nrows_b)+':T'+str(21+j*nrows_b)+')<>0;(SUM(T'+str(7+j*nrows_b)+':T'+str(21+j*nrows_b)+'))^(1/2);"")'), estilo_flat_2_decimales)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+18+l, 19, Formula('IF(P'+str(24+l+j*nrows_b)+'<>"";P'+str(24+l+j*nrows_b)+'^2;"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+21, 19, Formula('IF(AND(SUM(T'+str(7+j*nrows_b)+':T'+str(21+j*nrows_b)+')<>0;SUM(T'+str(24+j*nrows_b)+':T'+str(26+j*nrows_b)+')<>0);(SUM(T'+str(7+j*nrows_b)+':T'+str(21+j*nrows_b)+';T'+str(24+j*nrows_b)+':T'+str(26+j*nrows_b)+'))^(1/2);"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+22, 19, Formula('IF(AND(SUM(T'+str(7+j*nrows_b)+':T'+str(21+j*nrows_b)+')<>0;SUM(T'+str(24+j*nrows_b)+':T'+str(26+j*nrows_b)+')<>0);(((SUM(T'+str(7+j*nrows_b)+':T'+str(21+j*nrows_b)+')+SUM(T'+str(24+j*nrows_b)+':T'+str(26+j*nrows_b)+'))^(1/2))/1000)*TINV(0.0455;M'+str(22+j*nrows_b)+');"")'), estilo_bold_3_decimales)

            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b, 20, 'W - S', estilo_flat_2_decimales)
            for l in range(15): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1+l, 20, Formula('IF(AND(T'+str(7+l+j*nrows_b)+'<>"";M'+str(7+l+j*nrows_b)+'<>"");(T'+str(7+l+j*nrows_b)+'^2)/M'+str(7+l+j*nrows_b)+';"")'), estilo_flat_2_decimales)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+22, 20, Formula('IF(T'+str(28+j*nrows_b)+'<>"";"'+mu+'m.";"")'), estilo_bold)

            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b, 21, '% Contrib.', estilo_flat)
            for l in range(14): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+1+l, 21, Formula('IF(AND(T'+str(7+l+j*nrows_b)+'<>"";$T'+str(27+j*nrows_b)+'<>"");T'+str(7+l+j*nrows_b)+'/(($T'+str(27+j*nrows_b)+')^2);"")'), estilo_flat_2_decimales_porcentaje)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+15, 21, Formula('IF(AND(T'+str(21+j*nrows_b)+'<>"";$T'+str(22+j*nrows_b)+'<>"");T'+str(21+j*nrows_b)+'/(($T'+str(27+j*nrows_b)+')^2);"")'), estilo_flat_2_decimales_porcentaje)
            for l in range(3): self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+18+l, 21, Formula('IF(AND(T'+str(24+l+j*nrows_b)+'<>"";$T'+str(22+j*nrows_b)+'<>"");T'+str(24+l+j*nrows_b)+'/(($T'+str(27+j*nrows_b)+')^2);"")'), estilo_flat_2_decimales_porcentaje)
            self.hoja_incertidumbres.write(nrowsi_i+j*nrows_b+22, 21, Formula('SUM(V'+str(7+j*nrows_b)+':V'+str(21+j*nrows_b)+';V'+str(24+j*nrows_b)+':V'+str(26+j*nrows_b)+')'), estilo_flat_2_decimales_porcentaje)
            
            self.hoja_incertidumbres.write_merge(nrowsi_i+j*nrows_b+23, nrowsi_i+j*nrows_b+23, 0, 21, '', estilo_gray_dots)
            
            for i in range(22):
                self.hoja_incertidumbres.row(6+j*nrows_b+i).height_mismatch = 1
                self.hoja_incertidumbres.row(6+j*nrows_b+i).height = 400
        

            ## # hoja de resultados

            self.hoja_resultados.write(j+2, 0, j)
            self.hoja_resultados.write(j+2, 1, Formula("'FO02-Resultados de Calibracion'"+'!$J'+str(15+j*nrows_b)), estilo_flat_2_decimales)
            self.hoja_resultados.write(j+2, 2, Formula("'FO02-Resultados de Calibracion'"+'!$J'+str(17+j*nrows_b)), estilo_flat_2_decimales)
            self.hoja_resultados.write(j+2, 3, Formula("'FO02-Resultados de Calibracion'"+'!$J'+str(18+j*nrows_b)), estilo_flat_2_decimales)
            self.hoja_resultados.write(j+2, 4, Formula("'FO02-Resultados de Calibracion'"+'!$J'+str(19+j*nrows_b)), estilo_flat_2_decimales)
            self.hoja_resultados.write(j+2, 5, Formula("'FO02-Resultados de Calibracion'"+'!$J'+str(20+j*nrows_b)), estilo_flat_2_decimales)
            self.hoja_resultados.write(j+2, 6, Formula("'FO02-Resultados de Calibracion'"+'!$J'+str(13+j*nrows_b)), estilo_flat_2_decimales)

            

    def crear_informe(self, bloques):
        """ la hoja del informe es la unca que se imprime
        """
        num_list = [         'uno',              'dos',             'tres', 'cuatro', 'cinco', 'seis', 'siete', 'ocho', 'nueve',
            'diez',          'once',             'doce',            'trece', 'catorce', 'quince', 'diecis'+te+'is', 'diecisiete', 'dieciocho', 'diecinueve',
            'veinte',        'veintiuno',        'veintid'+to+'s',  'veintitr'+te+'s', 'veinticuatro', 'veinticinco', 'veintis'+te+'is', 'veintisiete', 'veintiocho', 'veintinueve',
            'treinta',       'treinta y uno,',   'treinta y dos',   'treinta y tres', 'treinta y cuatro', 'treinta y cinco', 'treinta y seis', 'treinta y siete', 'treinta y ocho', 'treinta y nueve',
            'cuarenta',      'cuarenta y uno',   'cuarenta y dos',  'cuarenta y tres', 'cuarenta y cuatro', 'cuarenta y cinco', 'cuarenta y seis', 'cuarenta y siete', 'cuarenta y ocho', 'cuarenta y nueve',
            'cincuenta',     'cincuenta y uno',  'cincuenta y dos', 'cincuenta y tres', 'cincuenta y cuatro', 'cincuenta y cinco', 'cincuenta y seis', 'cincuenta y siete', 'cincuenta y ocho', 'cincuenta y nueve',
            'sesenta',       'sesenta y uno',    'sesenta y dos',   'sesenta y tres', 'sesenta y cuatro', 'sesenta y cinco', 'sesenta y seis', 'sesenta y siete', 'sesenta y ocho', 'sesenta y nueve',
            'setenta',       'setenta y uno',    'setenta y dos',   'setenta y tres', 'setenta y cuatro', 'setenta y cinco', 'setenta y seis', 'setenta y siete', 'setenta y ocho', 'setenta y nueve',
            'ochenta',       'ochenta y uno',    'ochenta y dos',   'ochenta y tres', 'ochenta y cuatro', 'ochenta y cinco', 'ochenta y seis', 'ochenta y siete', 'ochenta y ocho', 'ochenta y nueve',
            'noventa',       'noventa y uno',    'noventa y dos',   'noventa y tres', 'noventa y cuatro', 'noventa y cinco', 'noventa y seis', 'noventa y siete', 'noventa y ocho', 'noventa y nueve',
            'cien',          'ciento uno',       'ciento dos',      'ciento tres', 'ciento cuatro', 'ciento cinco', 'ciento seis', 'ciento siete', 'ciento ocho', 'ciento nueve', 
            'ciento diez',   'ciento once',      'ciento doce',     'ciento trece', 'ciento catorce', 'ciento quince', 'ciento diecis'+te+'is ', 'ciento diecisiete', 'ciento dieciocho', 'ciento diecinueve',
            'ciento veinte', 'ciento veintiuno', 'ciento veintid'+to+'s']
                # hoja de inorme
        saltos = [(47, 0, 10), (75, 0, 10)]
        paginas_extra_tabla = len(bloques)//43      # se agregan paginas segun la cantidad de bloques calibrados
        if len(bloques)>6:                          # ##########################################################
            dos_en_uno = 0                          # si son pocos bloques, la tabla de la norma y observaciones 
        else:                                       # va en la misma pagina que los bloques
            dos_en_uno = 1                          # ##########################################################
            
        # ocultos

        self.hoja_informe.write(1, 11, Formula('VLOOKUP(M2;L3:M142;2)'), estilo_flat)
        self.hoja_informe.write(1, 12, len(bloques), estilo_flat)
        for l in range(122):
             self.hoja_informe.write(2+l, 11, 1+l, estilo_flat)
             self.hoja_informe.write(2+l, 12, num_list[l], estilo_flat)

        # principal
        
        self.hoja_informe.write_merge(0, 1, 0, 7, 'Certificado de calibraci'+to+'n / medici'+to+'n', estilo_flatnl_21)
        self.hoja_informe.write_merge(0, 0, 8, 10, Formula('CONCATENATE('+"'FO02-Resultados de Calibracion'"+'!$A$2;" ROS-106-";'+"'FO02-Resultados de Calibracion'"+'!$B$2;"-'+tU+'nico")'), estilo_flatnr)
        self.hoja_informe.write_merge(1, 1, 8, 10, 'N'+gra+' de p'+ta+'ginas del certificado: '+str(5+paginas_extra_tabla-dos_en_uno), estilo_flatnr)
        self.hoja_informe.write_merge(5, 5, 0, 3, 'Objeto:', estilo_boldl_tnr)
        self.hoja_informe.write_merge(5, 5, 4, 10, Formula('CONCATENATE("Conjunto de Bloques Patr'+to+'n de ";'+"'FO02-Resultados de Calibracion'"+'!D2)'), estilo_flatl_tnr)
        self.hoja_informe.write_merge(6, 6, 4, 10, Formula('CONCATENATE("Cantidad de piezas: "; '+str(len(bloques))+';" (";L2;")")'), estilo_flatl_tnr)
        self.hoja_informe.write_merge(9, 9, 0, 3, 'Fabricante / Marca:', estilo_boldl_tnr)
        self.hoja_informe.write_merge(9, 9, 4, 10, Formula('IF('+"'FO02-Resultados de Calibracion'"+'!F3<>"";'+"'FO02-Resultados de Calibracion'"+'!F3;"No Indica")'), estilo_flatl_tnr)
        self.hoja_informe.write_merge(13, 13, 0, 3, 'Modelo / N'+gra+' de serie / Id. interna:', estilo_boldl_tnr)
        self.hoja_informe.write_merge(13, 13, 4, 10, Formula('CONCATENATE(IF('+"'FO02-Resultados de Calibracion'"+'!B7<>"";'+"'FO02-Resultados de Calibracion'"+'!B7;"No Indica");" / ";IF('+"'FO02-Resultados de Calibracion'"+'!F7<>"";'+"'FO02-Resultados de Calibracion'"+'!F7;"No Indica");" / ";IF('+"'FO02-Resultados de Calibracion'"+'!G4<>"";'+"'FO02-Resultados de Calibracion'"+'!G4;"No Indica"))'), estilo_flatl_tnr)
        self.hoja_informe.write_merge(17, 17, 0, 3, 'Determinaciones requeridas:', estilo_boldl_tnr)
        self.hoja_informe.write_merge(17, 17, 4, 10, Formula("'FO02-Resultados de Calibracion'"+'!B4'), estilo_flatl_tnr)
        self.hoja_informe.write_merge(21, 21, 0, 3, 'Fecha de calibraci'+to+'n / medici'+to+'n:', estilo_boldl_tnr)
        self.hoja_informe.write_merge(21, 21, 4, 10, Formula("'FO02-Resultados de Calibracion'"+'!G2'), estilo_fechal_tnr)
        self.hoja_informe.write_merge(25, 25, 0, 3, 'Solicitante:', estilo_boldl_tnr)
        self.hoja_informe.write_merge(25, 25, 4, 10, Formula("'FO02-Resultados de Calibracion'"+'!B3'), estilo_flatl_tnr)
        self.hoja_informe.write_merge(26, 26, 4, 10, Formula("'FO02-Resultados de Calibracion'"+'!B5'), estilo_flatl_tnr)
        self.hoja_informe.write_merge(27, 27, 4, 10, Formula('CONCATENATE("(";'+"'FO02-Resultados de Calibracion'"+'!E6;") ";'+"'FO02-Resultados de Calibracion'"+'!F5;", Provincia de ";'+"'FO02-Resultados de Calibracion'"+'!B6)'), estilo_flatl_tnr)
        self.hoja_informe.write_merge(28, 28, 4, 10, Formula("'FO02-Resultados de Calibracion'"+'!G6'), estilo_flatl_tnr)
        self.hoja_informe.write_merge(36, 36, 0, 3, 'Rosario,', estilo_flatltop_tnr)
        self.hoja_informe.row(44).height = 1200 # alto de fila para ajustar la altura de las firmas
        self.hoja_informe.write_merge(45, 46, 0, 3, 'Firma y aclaraci'+to+'n (o sello)\nPersonal interviniente', estilo_flat_tnr9)
        self.hoja_informe.write_merge(45, 46, 6, 10, 'Firma y sello\nCoordinador de U.T.', estilo_flat_tnr9)

        # pagina 2

        self.hoja_informe.write_merge(47, 47, 8, 10, Formula('I1'), estilo_flatnr)
        self.hoja_informe.write(48, 10, 'P'+ta+'gina: 2', estilo_flatnr)
        self.hoja_informe.write_merge(49, 49, 0, 3, 'Metodolog'+ti+'a empleada', estilo_boldl_tnr)
        self.hoja_informe.write_merge(50, 50, 0, 10, bullet+' Seg'+tu+'n ISO 3650. M'+te+'todo por comparaci'+to+'n mec'+ta+'nica. Seg'+tu+'n Procedimiento Espec'+ti+'fico LIM1-PE03 de INTI-Rosario.', estilo_flatl_tnr)
        self.hoja_informe.write_merge(51, 53, 0, 10, bullet+' La calibraci'+to+'n de cada Bloque Patr'+to+'n se efectu'+to+' mediante mediciones de longitud por comparaci'+to+'n  mec'+ta+'nica  en 5 (cinco) puntos de sus caras de referencia.\nSe obtuvieron para cada Bloque Patr'+to+'n los siguientes valores:', estilo_flatl_tnr)
        self.hoja_informe.write_merge(55, 55, 0, 10, 'Desviaci'+to+'n al punto central (e): ', estilo_underl_tnr)
        self.hoja_informe.write_merge(56, 57, 0, 10, 'Longitud que sumada algebraicamente a la longitud nominal del Bloque Patr'+to+'n da como resultado la longitud central verdadera del mismo.', estilo_flatl_tnr)
        self.hoja_informe.write_merge(58, 58, 0, 10, 'Variaci'+to+'n de longitud (v): ', estilo_underl_tnr)
        self.hoja_informe.write_merge(59, 60, 0, 10, 'Diferencia entre la longitud m'+ta+'xima y m'+ti+'nima medida en el Bloque Patr'+to+'n.\nPara su calibraci'+to+'n, en cada Bloque Patr'+to+'n mesurando se efectuaron tres series de mediciones como m'+ti+'nimo.', estilo_flatl_tnr)
        self.hoja_informe.write_merge(62, 62, 0, 10, bullet+' El Patr'+to+'n de referencia utilizado:', estilo_flatl_tnr)
        self.hoja_informe.write_merge(64, 64, 0, 10, Formula('CONCATENATE("            Bloques Patr'+to+'n de ";'+"'FO02-Resultados de Calibracion'"+'!D2;", de 122 piezas, marca TESA-CARY")'), estilo_flatl_tnr)
        self.hoja_informe.write_merge(65, 65, 0, 10, '            Comparador de bloques marca TESA, modelo  UPC N'+gra+' 5F01', estilo_flatl_tnr)
        self.hoja_informe.write_merge(68, 68, 0, 10, 'Condiciones de medici'+to+'n', estilo_boldl_tnr)
        self.hoja_informe.write_merge(69, 70, 0, 10, 'Previo  a la calibraci'+to+'n, los bloques fueron limpiados con solvente.\nLos bloques patr'+to+'n a ser calibrados, se dejaron estabilizar t'+te+'rmicamente, seg'+tu+'n procedimiento.', estilo_flatl_tnr)
        self.hoja_informe.write_merge(72, 72, 0, 10, 'Condiciones ambientales', estilo_boldl_tnr)
        self.hoja_informe.write_merge(73, 74, 0, 10, bullet+' Temperatura de calibraci'+to+'n: (20,0 '+pm+' 0,5) '+gra+'C.\n'+bullet+' Humedad relativa: menor al 60'+percent+'.', estilo_flatl_tnr)

        # pagina 3

        self.hoja_informe.write_merge(75, 75, 8, 10, Formula('I1'), estilo_flatnr)
        self.hoja_informe.write(76, 10, 'P'+ta+'gina: 3', estilo_flatnr)
        self.hoja_informe.write_merge(77, 77, 0, 3, 'Resultados', estilo_boldl_tnr)
        self.hoja_informe.write_merge(79, 80, 0, 1, 'Longitud\nnominal', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: left double, right thin, top double, bottom thin;'))
        self.hoja_informe.write_merge(79, 80, 2, 2, 'Identificaci'+to+'n', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, top double, bottom thin;'))
        self.hoja_informe.write_merge(79, 80, 3, 3, 'e', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, top double, bottom thin;'))
        self.hoja_informe.write_merge(79, 80, 4, 5, 'Incertidumbre\n(e)', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, top double, bottom thin;'))
        self.hoja_informe.write_merge(79, 80, 6, 7, 'v', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, top double, bottom thin;'))
        self.hoja_informe.write_merge(79, 80, 8, 9, 'Incertidumbre\n(v)', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right double, top double, bottom thin;'))

        self.hoja_informe.write_merge(81, 81, 0, 1, '[mm]', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: left double, right thin, bottom double;'))
        self.hoja_informe.write(81, 2, '', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, bottom double;'))
        self.hoja_informe.write(81, 3, '['+mu+'m]', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, bottom double;'))
        self.hoja_informe.write_merge(81, 81, 4, 5, '['+mu+'m]', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, bottom double;'))
        self.hoja_informe.write_merge(81, 81, 6, 7, '['+mu+'m]', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, bottom double;'))
        self.hoja_informe.write_merge(81, 81, 8, 9, '['+mu+'m]', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right double, bottom double;'))

        

        for p in range(paginas_extra_tabla+1):
            if len(bloques) <= (p+1)*43:
                for f in range(len(bloques)-p*43):
                    self.hoja_informe.write_merge(82+f+49*p, 82+f+49*p, 0, 1, Formula('IF(Resultados!B'+str(3+f+43*p)+'<>0;Resultados!B'+str(3+f+43*p)+';"")'), easyxf('font: name Times New Roman; alignment: horz center, vert center, wrap true; borders: left double, right thin, bottom thin;'))
                    self.hoja_informe.write(82+f+49*p, 2, Formula('IF(Resultados!G'+str(3+f+43*p)+'<>0;Resultados!G'+str(3+f+43*p)+';"")'), easyxf('font: name Times New Roman; alignment: horz center, vert center, wrap true; borders: right thin, bottom thin;'))
                    self.hoja_informe.write(82+f+49*p, 3, Formula('Resultados!C'+str(3+f+43*p)), easyxf('font: name Times New Roman; alignment: horz center, vert center, wrap true; borders: right thin, bottom thin;', num_format_str="0.00"))
                    self.hoja_informe.write_merge(82+f+49*p, 82+f+49*p, 4, 5, Formula('Resultados!D'+str(3+f+43*p)), easyxf('font: name Times New Roman; alignment: horz center, vert center, wrap true; borders: right thin, bottom thin;', num_format_str="0.00"))
                    self.hoja_informe.write_merge(82+f+49*p, 82+f+49*p, 6, 7, Formula('Resultados!E'+str(3+f+43*p)), easyxf('font: name Times New Roman; alignment: horz center, vert center, wrap true; borders: right thin, bottom thin;', num_format_str="0.00"))
                    self.hoja_informe.write_merge(82+f+49*p, 82+f+49*p, 8, 9, Formula('Resultados!F'+str(3+f+43*p)), easyxf('font: name Times New Roman; alignment: horz center, vert center, wrap true; borders: right double, bottom thin;', num_format_str="0.00"))
                    fin_tabla = 82+f+49*p+8
                self.hoja_informe.write_merge(fin_tabla-7, fin_tabla-6, 0, 9, '', easyxf('font: name Times New Roman; alignment: horz center, vert center, wrap true; borders: top double;'))
                self.hoja_informe.write_merge(fin_tabla-5, fin_tabla-1,
                    0, 10, 'La incertidumbre de medici'+to+'n informada es la'
                    +' incertidumbre expandida con  un nivel de confianza'
                    +' aproximado del 95% \n(k = 2) para una distribuci'+to+'n normal.'
                    +'\nEl mtodo utilizado para el c'+ta+'lculo de la incertidumbre'
                    +' expandida de medici'+to+'n est'+ta+' basado en los lineamientos'
                    +' de la "Guide to the Expression of Uncertainty of Measurement"'
                    +' de BIPM, IEC, IFCC, ISO, IUPAP, IUPAC y OIML, a'+gn+'o 1993.'
                    , estilo_flatl_tnr)
                
                if not dos_en_uno:
                    saltos.append((fin_tabla, 0, 10))
                    print 'salta'
                else:
                    print 'no salta'
            else:
                for f in range(43):
                    self.hoja_informe.write_merge(82+f+49*p, 82+f+49*p, 0, 1, Formula('IF(Resultados!B'+str(3+f+43*p)+'<>0;Resultados!B'+str(3+f+43*p)+';"")'), easyxf('font: name Times New Roman; alignment: horz center, vert center, wrap true; borders: left double, right thin, bottom thin;'))
                    self.hoja_informe.write(82+f+49*p, 2, Formula('IF(Resultados!G'+str(3+f+43*p)+'<>0;Resultados!G'+str(3+f+43*p)+';"")'), easyxf('font: name Times New Roman; alignment: horz center, vert center, wrap true; borders: right thin, bottom thin;'))
                    self.hoja_informe.write(82+f+49*p, 3, Formula('Resultados!C'+str(3+f+43*p)), easyxf('font: name Times New Roman; alignment: horz center, vert center, wrap true; borders: right thin, bottom thin;', num_format_str="0.00"))
                    self.hoja_informe.write_merge(82+f+49*p, 82+f+49*p, 4, 5, Formula('Resultados!D'+str(3+f+43*p)), easyxf('font: name Times New Roman; alignment: horz center, vert center, wrap true; borders: right thin, bottom thin;', num_format_str="0.00"))
                    self.hoja_informe.write_merge(82+f+49*p, 82+f+49*p, 6, 7, Formula('Resultados!E'+str(3+f+43*p)), easyxf('font: name Times New Roman; alignment: horz center, vert center, wrap true; borders: right thin, bottom thin;', num_format_str="0.00"))
                    self.hoja_informe.write_merge(82+f+49*p, 82+f+49*p, 8, 9, Formula('Resultados!F'+str(3+f+43*p)), easyxf('font: name Times New Roman; alignment: horz center, vert center, wrap true; borders: right double, bottom thin;', num_format_str="0.00"))
                self.hoja_informe.write_merge(125+49*p, 125+49*p, 8, 10, Formula('F1'), estilo_flatnr)
                self.hoja_informe.write(126+49*p, 10, 'P'+ta+'gina: '+str(4+p), estilo_flatnr)
                self.hoja_informe.write_merge(128+49*p, 129+49*p, 0, 1, 'Longitud\nnominal', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: left double, right thin, top double, bottom thin;'))
                self.hoja_informe.write_merge(128+49*p, 129+49*p, 2, 2, 'Identificaci'+to+'n', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, top double, bottom thin;'))
                self.hoja_informe.write_merge(128+49*p, 129+49*p, 3, 3, 'e', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, top double, bottom thin;'))
                self.hoja_informe.write_merge(128+49*p, 129+49*p, 4, 5, 'Incertidumbre\n(e)', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, top double, bottom thin;'))
                self.hoja_informe.write_merge(128+49*p, 129+49*p, 6, 7, 'v', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, top double, bottom thin;'))
                self.hoja_informe.write_merge(128+49*p, 129+49*p, 8, 9, 'Incertidumbre\n(v)', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right double, top double, bottom thin;'))

                self.hoja_informe.write_merge(130+49*p, 130+49*p, 0, 1, '[mm]', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: left double, right thin, bottom double;'))
                self.hoja_informe.write(130+49*p, 2, '', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, bottom double;'))
                self.hoja_informe.write(130+49*p, 3, '['+mu+'m]', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, bottom double;'))
                self.hoja_informe.write_merge(130+49*p, 130+49*p, 4, 5, '['+mu+'m]', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, bottom double;'))
                self.hoja_informe.write_merge(130+49*p, 130+49*p, 6, 7, '['+mu+'m]', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right thin, bottom double;'))
                self.hoja_informe.write_merge(130+49*p, 130+49*p, 8, 9, '['+mu+'m]', easyxf('font: name Times New Roman, bold true; alignment: horz center, vert center, wrap true; borders: right double, bottom double;'))

                saltos.append((125+49*p, 0, 10))

        # pagina "4"

        if not dos_en_uno:
            self.hoja_informe.write_merge(fin_tabla, fin_tabla, 8, 10, Formula('I1'), estilo_flatnr)
            self.hoja_informe.write(fin_tabla+1, 10, 'P'+ta+'gina: '+str(4+paginas_extra_tabla), estilo_flatnr)
        self.hoja_informe.write_merge(fin_tabla+2, fin_tabla+2, 0, 3, 'Desviaci'+to+'n y tolerancias permitidas:', estilo_underr_tnr)
        self.hoja_informe.write_merge(fin_tabla+2, fin_tabla+2, 4, 9, ' (valores en '+mu+'m) seg'+tu+'n ISO 3650 - 1998.', estilo_flatl_tnr)
        # tabla desviaciones permitidas
        self.hoja_informe.write_merge(fin_tabla+5, fin_tabla+6, 2, 9, 'M'+ta+'ximas desviaci'+to+'nes al nominal (e) y variaciones de longitud (v) seg'+tu+'n ISO 3650', estilo_bolddoble_tnr)
        self.hoja_informe.write_merge(fin_tabla+7, fin_tabla+8, 2, 2, 'Desde', estilo_flatthin_tnr)
        self.hoja_informe.write_merge(fin_tabla+7, fin_tabla+8, 3, 3, 'Hasta\n(inclusive)', estilo_flatthin_tnr)
        self.hoja_informe.write_merge(fin_tabla+7, fin_tabla+8, 4, 5, 'Grado 0', estilo_flatthin_tnr)
        self.hoja_informe.write_merge(fin_tabla+7, fin_tabla+8, 6, 7, 'Grado 1', estilo_flatthin_tnr)
        self.hoja_informe.write_merge(fin_tabla+7, fin_tabla+8, 8, 9, 'Grado 2', estilo_flatthin_tnr)
        self.hoja_informe.write(fin_tabla+9, 2, '[mm]', estilo_flatthin_tnr)
        self.hoja_informe.write(fin_tabla+9, 3, '[mm]', estilo_flatthin_tnr)
        for l in range(3): self.hoja_informe.write(fin_tabla+9, 4+2*l, 'e ['+mu+'m]', estilo_flatthin_tnr)
        for l in range(3): self.hoja_informe.write(fin_tabla+9, 5+2*l, 'v ['+mu+'m]', estilo_flatthin_tnr)
        for l, m in [[0, 0.5], [1, 10], [2, 25], [3, 50], [4, 75]]: self.hoja_informe.write(fin_tabla+10+l, 2, m, estilo_flatthin_tnr)
        for l, m in [[0, 10], [1, 25], [2, 50], [3, 75], [4, 100]]: self.hoja_informe.write(fin_tabla+10+l, 3, m, estilo_flatthin_tnr)
        for l, m in [[0, '0,12'], [1, '0,14'], [2, '0,20'], [3, '0,25'], [4, '0,30']]: self.hoja_informe.write(fin_tabla+10+l, 4, m, estilo_flatthin_tnr)
        for l, m in [[0, '0,10'], [1, '0,10'], [2, '0,10'], [3, '0,12'], [4, '0,12']]: self.hoja_informe.write(fin_tabla+10+l, 5, m, estilo_flatthin_tnr)

        for l, m in [[0, '0,20'], [1, '0,30'], [2, '0,40'], [3, '0,50'], [4, '0,60']]: self.hoja_informe.write(fin_tabla+10+l, 6, m, estilo_flatthin_tnr)
        for l, m in [[0, '0,16'], [1, '0,16'], [2, '0,18'], [3, '0,18'], [4, '0,20']]: self.hoja_informe.write(fin_tabla+10+l, 7, m, estilo_flatthin_tnr)

        for l, m in [[0, '0,45'], [1, '0,60'], [2, '0,80'], [3, '1'], [4, '1,20']]: self.hoja_informe.write(fin_tabla+10+l, 8, m, estilo_flatthin_tnr)
        for l, m in [[0, '0,30'], [1, '0,30'], [2, '0,30'], [3, '0,35'], [4, '0,35']]: self.hoja_informe.write(fin_tabla+10+l, 9, m, estilo_flatthin_tnr)

        for l in range(8):
            self.hoja_informe.write(fin_tabla+7+l, 1, '', easyxf('borders: right double'))
            self.hoja_informe.write(fin_tabla+7+l, 10, '', easyxf('borders: left double'))
        for l in range(8): self.hoja_informe.write(fin_tabla+15, 2+l, '', easyxf('borders: top double'))

        self.hoja_informe.write_merge(fin_tabla+17, fin_tabla+17, 0, 1, 'Observaciones:', estilo_boldl_tnr)
        self.hoja_informe.write_merge(fin_tabla+19, fin_tabla+28, 0, 10, '___ _ ___', estilo_flatltop_tnr)
        saltos.append((fin_tabla+29, 0, 10))

        # pagina "5"
        
        fin_tabla -= 26 # se actualiza el valor debido a una modificaci'+to+'n del tamaño de Observaciones

        self.hoja_informe.write_merge(fin_tabla+55, fin_tabla+55, 8, 10, Formula('I1'), estilo_flatnr)
        self.hoja_informe.write(fin_tabla+56, 10, 'P'+ta+'gina: '+str(5+paginas_extra_tabla-dos_en_uno), estilo_flatnr)
        self.hoja_informe.write_merge(fin_tabla+58, fin_tabla+64, 0, 10, 'El INTI es el m'+ta+'ximo '+to+'rgano t'+te+'cnico de la Rep'+tu+'blica Argentina en el campo de la Metrolog'+ti+'a. Es funci'+to+'n legal del INTI la realizaci'+to+'n y mantenimiento de los patrones de las unidades de medida, conforme al Sistema Internacional de Unidades (SI), as'+ti+' como su diseminaci'+to+'n en los '+ta+'mbitos de la metrolog'+ti+'a cient'+ti+'fica, industrial y legal, constituyendo la c'+tu+'spide de la pir'+ta+'mide de trazabilidad metrol'+to+'gica en la Rep'+tu+'blica Argentina. Los Certificados de Calibraci'+to+'n/Medici'+to+'n emitidos por el INTI y por los Institutos Designados por el INTI en las magnitudes no cubiertas por '+te+'ste, garantizan que el elemento calibrado posee trazabilidad a los patrones nacionales realizados y mantenidos por el propio INTI y los Institutos Designados por el INTI.', estilo_flatj_tnr)
        self.hoja_informe.write_merge(fin_tabla+65, fin_tabla+68, 0, 10, 'Con el fin de asegurar la validez, coherencia y equivalencia internacional de sus mediciones, el INTI, como miembro del Sistema Interamericano de Metrolog'+ti+'a (SIM), participa junto con otros Institutos Nacionales de Metrolog'+ti+'a en comparaciones interlaboratorios organizadas por las diferentes Organizaciones Metrol'+to+'gicas Regionales (OMR) o por el propio Comit'+te+' Internacional de Pesas y Medidas (CIPM), a trav'+te+'s de sus Comit'+te+'s Consultivos.', estilo_flatj_tnr)
        self.hoja_informe.write_merge(fin_tabla+69, fin_tabla+77, 0, 10, 'El INTI es asimismo firmante del Acuerdo de Reconocimiento Mutuo de Patrones Nacionales de Medida y Certificados de Calibraci'+to+'n y de Medici'+to+'n emitidos por los Institutos Nacionales de Metrolog'+ti+'a (CIPM-MRA), redactado por el Comit'+te+' Internacional de Pesas y Medidas, por el que todos los Institutos participantes reconocen entre s'+ti+' la validez de sus Certificados de Calibraci'+to+'n y de Medici'+to+'n para las magnitudes, campos e incertidumbres especificados en el Ap'+te+'ndice C del Acuerdo, el cual refleja las Capacidades de Medici'+to+'n y Calibraci'+to+'n (CMC) aceptadas a nivel internacional, soportadas por comparaciones internacionales y realizadas bajo un sistema de gesti'+to+'n de la calidad basado en la norma ISO/IEC 17025. Este Acuerdo constituye la respuesta a la creciente necesidad de un esquema abierto, amplio y transparente para brindar a los usuarios informaci'+to+'n cuantitativa confiable sobre la comparabilidad de los servicios nacionales de metrolog'+ti+'a, proporcionando la base t'+te+'cnica para acuerdos m'+ta+'s amplios en el comercio internacional y en los '+ta+'mbitos reglamentados.', estilo_flatj_tnr)
        self.hoja_informe.write_merge(fin_tabla+78, fin_tabla+82, 0, 10, 'Las CMCs declaradas por cada participante del CIPM-MRA son aceptadas por los dem'+ta+'s mediante un complejo procedimiento de evaluaciones, que en cada caso puede demandar varios a'+gn+'os de actividad, hasta llegar a ser incorporadas en el Ap'+te+'ndice C de la base de de datos que mantiene la Oficina Internacional de Pesas y Medidas (Bureau Internacional des Poids et Mesures - BIPM) en el sitio web http://www.bipm.org. Desde la firma del Acuerdo en 1999 hasta la fecha, el INTI ya ha presentado sus CMCs m'+ta+'s relevantes en todas las magnitudes y contin'+tu+'a ampliando sus declaraciones.', estilo_flatj_tnr)
        self.hoja_informe.write_merge(fin_tabla+84, fin_tabla+84, 0, 10, 'Fin del Certificado', estilo_flatl_tnr)
        self.hoja_informe.write_merge(fin_tabla+86, fin_tabla+86, 0, 10, '', easyxf('borders: top thin'))

        for i in range(20):
            self.hoja_informe.row(fin_tabla+88+i).height = 240

        self.hoja_informe.write_merge(fin_tabla+87, fin_tabla+87, 0, 10, 'INSTITUTO NACIONAL DE TECNOLOG'+tI+'A INDUSTRIAL', estilo_flat_tnr8)
        self.hoja_informe.write(fin_tabla+88, 0, '}', easyxf('font: name Wingdings 3, height 160'))
        self.hoja_informe.write_merge(fin_tabla+88, fin_tabla+88, 1, 10, 'En Buenos Aires', estilo_flatl_tnr8)
        self.hoja_informe.write_merge(fin_tabla+89, fin_tabla+91, 1, 10, 'fisicaymetrologia'+arroba+'inti.gob.ar - electronicaeinformatica'+arroba+'inti.gob.ar - mecanica'+arroba+'inti.gob.ar - quimica'+arroba+'inti.gob.ar - contaminantesorganicas'+arroba+'inti.gob.ar\n'+
                                      'Colectora de Av. Gral. Paz 5445, e'+bar+' Albarellos y Av. de los Constituyentes - CC 157 (B1650WAB) - San Mart'+ti+'n, Prov. de Buenos Aires, Argentina.\n'+
                                      'Tel. 54 011 4724-6200 '+bar+' 6300 '+bar+' 6400.', estilo_flatl_tnr75)
        self.hoja_informe.write(fin_tabla+92, 0, '}', easyxf('font: name Wingdings 3, height 160'))
        self.hoja_informe.write_merge(fin_tabla+92, fin_tabla+92, 1, 10, 'C'+to+'rdoba', estilo_flatl_tnr8)
        self.hoja_informe.write_merge(fin_tabla+93, fin_tabla+94, 1, 10,
            u'cba'+arroba+u'inti.gov.ar\nAv. V'+te+u'lez S'+ta
            +u'rsfield 1561 - CC 884 (X5000JKC) C'+to
            +u'rdoba, Prov. de C'+to
            +u'rdoba, Argentina. Tel. 54 0351 469-8304 '+bar+u' 684835 '
            +u'Fax. 54 0351 4699459.', estilo_flatl_tnr75)
        self.hoja_informe.write(fin_tabla+95, 0, '}', easyxf('font: name Wingdings 3, height 160'))
        self.hoja_informe.write_merge(fin_tabla+95, fin_tabla+95, 1, 10, 'Rafaela', estilo_flatl_tnr8)
        self.hoja_informe.write_merge(fin_tabla+96, fin_tabla+97, 1, 10,
            u'raf'+arroba+u'inti.gov.ar\nRuta Nacional 34 km 227,6 · '
            +u'(S2300WAC) Rafaela, Prov. de Santa Fe, Argentina. '
            +u'Telefax. 54 03492 440471.', estilo_flatl_tnr75)
        self.hoja_informe.write(fin_tabla+98, 0, '}', easyxf('font: name Wingdings 3, height 160'))
        self.hoja_informe.write_merge(fin_tabla+98, fin_tabla+98, 1, 10, 'Rosario', estilo_flatl_tnr8)
        self.hoja_informe.write_merge(fin_tabla+99, fin_tabla+100, 1, 10, 'ros'+arroba+'inti.gov.ar\n'+
                                      'Edificio INTI Esmeralda y Ocampo (S2000FHQ) Rosario - Prov. de Santa Fe, Argentina. Telefax: 54 0341 481-5976 '+bar+' 482-3283 '+bar+' 482-1030.', estilo_flatl_tnr75)
        self.hoja_informe.write(fin_tabla+101, 0, '}', easyxf('font: name Wingdings 3, height 160'))
        self.hoja_informe.write_merge(fin_tabla+101, fin_tabla+101, 1, 10, 'Mar del Plata', estilo_flatl_tnr8)
        self.hoja_informe.write_merge(fin_tabla+102, fin_tabla+103, 1, 
            10, u'mdq'+arroba+u'inti.gov.ar\n'+u'Marcelo T. de Alvear '
            +u'1168 - C.C. B7603AAX · Mar del Plata - Buenos Aires · '
            +u'Argentina. Tel'+te+u'fono (54 223) 480 2801.', 
            estilo_flatl_tnr75)
        self.hoja_informe.write(fin_tabla+104, 0, '}', easyxf('font: name Wingdings 3, height 160'))
        self.hoja_informe.write_merge(fin_tabla+104, fin_tabla+104, 1, 10, 'Salta', estilo_flatl_tnr8)
        self.hoja_informe.write_merge(fin_tabla+105, fin_tabla+106, 1, 
            10, u'pmlnoa'+arroba+u'inti.gov.ar\n'+u'Fragata Libertad N'
            +gra+u' 350 (4400) - Salta - Prov. de Salta - Argentina. '
            +u'Telefax: 54 0387 4251085.', estilo_flatl_tnr75)
        self.hoja_informe.write(fin_tabla+107, 0, '}', easyxf('font: name Wingdings 3, height 160'))
        self.hoja_informe.write_merge(fin_tabla+107, fin_tabla+107, 1, 
            10, u'En cualquier otro lugar del pa'+ti+u's: consultar sin'
            +u' cargo al 0800-444-4004, a consultas'+arroba
            +u'inti.gov.ar o en www.inti.gov.ar.', estilo_flatl_tnr8)


        self.hoja_informe.horz_page_breaks = saltos
                   
    def save_sheet(self, destino):
        """ guardar la planilla
        si no se especifica el nombre se guarda con el numero de ot
        si no se especifico el n ot se guarda con la fecha y la hora
        """
        self.wb.save(destino)

























